考虑一下,我有一个看起来像这样的数据框:
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
我需要做的是将C和D相加,如果总和大于10,则删除整行。但是,我无法按列名来访问列,我需要按它们的位置来访问。
我如何在大熊猫中做到这一点?
编辑: 另一个问题。
A B C D
0 0 NaN 2 3
1 4 5 NaN NaN
2 8 9 10 11
如何在B,C和D列中保留至少具有两个值的行?
答案 0 :(得分:1)
为什么不能按名称访问列?如果确实不能,则可以执行以下操作:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame({'A': [0, 4, 8], 'B': [1, 5, 9], 'C': [2, 6, 10], 'D': [3, 7, 11]})
In [3]: df
Out[3]:
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
In [4]: df.loc[df.iloc[:, 2:].sum(axis=1) <= 10]
Out[4]:
A B C D
0 0 1 2 3
答案 1 :(得分:1)
在B,C和D列中保留至少具有两个值的行。 您可以使用它。
df = pd.DataFrame({'A': [0,4,8], 'B':[1, np.nan, 9], 'C':[2,np.nan, np.nan], 'D':[3, 7, 11]})
mask = df.iloc[:,1:].isnull().sum(axis=1) < 2
print(df[mask])
输出
A B C D
0 0 1.0 2.0 3
2 8 9.0 NaN 11
对于第一个问题,您应该使用nan
填写其余的df.fillna()
值,
Documentation,然后使用较早答案中提供的解决方案
df = new_df.fillna(0)
print(df)
输出
A B C D
0 0 1.0 2.0 3
2 8 9.0 0.0 11
现在,您可以使用df.loc[df.iloc[:, 2:].sum(axis=1) <= 10]
删除C
和D
之和大于10的行。
最后,我建议您每个问题保留1条帖子,这有助于其他人进行搜索。
答案 2 :(得分:0)
这是:
df[(df['C']+df['D']) <= 10]