我正在 Pandas 中處理資料框,我想根據列值的總和洗掉一些列。如果總數為 0,則我洗掉該列,否則我保留它。我一直在嘗試這樣做,但我還沒有找到方法。有小費嗎?
uj5u.com熱心網友回復:
如果 sum 不相等0,則最簡單的是過濾器,因此這意味著 rmeoved 列具有sum=0:
df.loc[:, df.sum().ne(0)]
如果非數字列也使用DataFrame.select_dtypeswith add non numeric by DataFrame.reindex:
df = pd.DataFrame(np.random.randint(0,100,size=(3, 4)), columns=list('ABCD'))
df['E'] = 0
df['G'] = 'aa'
df = df.loc[:, df.select_dtypes(np.number).sum().ne(0).reindex(df.columns, fill_value=True)]
print (df)
A B C D G
0 47 42 16 2 aa
1 81 72 19 55 aa
2 28 70 79 29 aa
uj5u.com熱心網友回復:
您可以使用串列理解并創建一個新的過濾資料框,其中包含具有sum > 0或等效地將總和減少到 0 的列:
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df['E'] = 0
>>> df
A B C D E
0 72 61 15 65 0
1 30 4 72 88 0
2 28 54 9 95 0
3 59 1 82 0 0
4 40 77 55 36 0
.. .. .. .. .. ..
95 69 32 60 6 0
96 28 33 8 56 0
97 47 25 37 36 0
98 0 4 51 87 0
99 18 17 65 85 0
df[[col for col in df.columns if df[col].sum()!=0]]
df.drop([col for col in df.columns if df[col].sum()==0], axis=1)
兩者都列印:
A B C D
0 72 61 15 65
1 30 4 72 88
2 28 54 9 95
3 59 1 82 0
4 40 77 55 36
.. .. .. .. ..
95 69 32 60 6
96 28 33 8 56
97 47 25 37 36
98 0 4 51 87
99 18 17 65 85
[100 rows x 4 columns]
uj5u.com熱心網友回復:
所以我所做的是以下內容:
第一:將所有具有數值的列相加
df_pivot_2_sum = df_pivot_2.sum(numeric_only = True)
第二:只過濾零
df_pivot_2_sum = df_pivot_2_sum[df_pivot_2_sum == 0]
第三:獲取列串列
columns_zero_value = list(df_pivot_2_sum.index.values)
第四:從該串列中洗掉列
df_pivot_2 = df_pivot_2.drop(columns_zero_value, axis=1)
感謝大家的支持!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/345060.html
上一篇:在熊貓資料框中映射日期范圍
