我有一個超過三百萬行的資料框。我正在嘗試對 Bar_Code 列中的值進行分組,并僅提取 SOH、Cost 和 Sold_Date 中所有行的總和為零的那些行。
我的資料框如下:
Location Bar_Code SOH Cost Sold_Date
1 00000003589823 0 0.00 NULL
2 00000003589823 0 0.00 NULL
3 00000003589823 0 0.00 NULL
1 0000000151818 -102 0.00 NULL
2 0000000151818 0 8.00 NULL
3 0000000151818 0 0.00 2020-10-06T16:35:25.000
1 0000131604108 0 0.00 NULL
2 0000131604108 0 0.00 NULL
3 0000131604108 0 0.00 NULL
1 0000141073505 -53 3.00 2020-10-06T16:35:25.000
2 0000141073505 0 0.00 NULL
3 0000141073505 -20 20.00 2020-09-25T10:11:30.000
我試過下面的代碼:
df.groupby(['Bar_Code','SOH','Cost','Sold_Date']).sum()
但我得到以下輸出:
Bar_Code SOH Cost Sold_Date
0000000151818 -102.0 0.0000 2021-12-13T10:01:59.000
0.0 8.0000 2020-10-06T16:35:25.000
0000131604108 0.0 0.0000 NULL
0000141073505 -53.0 0.0000 2021-11-28T16:57:59.000
3.0000 2021-12-05T11:23:02.000
0.0 0.0000 2020-04-14T08:02:45.000
0000161604109 -8.0 4.1000 2020-09-25T10:11:30.000
00000003589823 0 0.00 NULL
我需要檢查是否有可能獲得以下所需的輸出以僅獲得 SOH、Cost & Sold_Date 總和為 0 或 NULL 的特定行,代碼忽略第一列(位置)是安全的:
Bar_Code SOH Cost Sold_Date
00000003589823 0 0.00 NULL
0000131604108 0.0 0.0000 NULL
uj5u.com熱心網友回復:
想法是過濾所有組如果SOH,Cost并且Sold_Date是0或NaN過濾行如果不匹配首先,獲取Bar_Code和最后反轉掩碼以過濾所有組isin:
g = df.loc[df[['SOH','Cost','Sold_Date']].fillna(0).ne(0).any(axis=1), 'Bar_Code']
df1 = df[~df['Bar_Code'].isin(g)].drop_duplicates('Bar_Code').drop('Location', axis=1)
print (df1)
Bar_Code SOH Cost Sold_Date
0 00000003589823 0 0.0 NaN
6 0000131604108 0 0.0 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392739.html
