Joe*_*ond 1 python filter dataframe pandas
我有一个类似于以下的数据集:
dt = {'A': [0,0,0,1],
'B': [0, 2,0,3],
'C': [0,0,0,4],
'D': [0,5,0,6]}
dt = pd.DataFrame(dt)
Run Code Online (Sandbox Code Playgroud)
我的目标是在列 ['A', 'B','C', 'D'] 对于该行都为零时过滤所有行。在实际数据集中,而不是 4 列,我有超过 20 列。所以下面的解决方案是不可行的:
dt = dt[(dt['A'] == 0) & (dt['B'] == 0) & (dt['C'] == 0) & (dt['D'] == 0)]
Run Code Online (Sandbox Code Playgroud)
所以我想出了以下解决方案:
dt['new'] = np.nan
lst = [0,1,2,3]
for i in range(len(dt)):
dt.iloc[i, 4] = all(dt.iloc[i, lst] == 0)
Run Code Online (Sandbox Code Playgroud)
最后我可以根据“新”列进行过滤。
我正在寻找更有效的解决方案,最好是没有循环的解决方案,任何帮助将不胜感激。
您可以使用此尝试DataFrame.eq与DataFrame.all和boolean indexing
dt[dt.eq(0).all(1)]
A B C D
0 0 0 0 0
2 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
另一个想法是使用np.anyorDataFrame.any作为布尔掩码
dt[~dt.any(1)] # @Sayandip Dutta's answer in the comments
dt[~np.any(dt, axis=1)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |