假设我有一个如下数据框,
import pandas as pd
columns=['A','B','C','D', 'E', 'F']
index=['1','2','3','4','5','6']
df = pd.DataFrame(columns=columns,index=index)
df['D']['1'] = 1
df['E'] = 1
df['F']['1'] = 1
df['A']['2'] = 1
df['B']['3'] = 1
df['C']['4'] = 1
df['A']['5'] = 1
df['B']['5'] = 1
df['C']['5'] = 1
df['D']['6'] = 1
df['F']['6'] = 1
df
A B C D E F
1 NaN NaN NaN 1 1 1
2 1 NaN NaN NaN 1 NaN
3 NaN 1 NaN NaN 1 NaN
4 NaN NaN 1 NaN 1 NaN
5 1 1 1 NaN 1 NaN
6 NaN NaN NaN 1 1 1
我的条件是,我想删除仅在A,B,C(一起)没有值时才有值的列。我想找到哪一列与A,B,C列互斥。我有兴趣只在A或B或C有值时找到具有值的列。这里的输出是删除D,F列。但我的数据框有400列,我想要一种方法来检查A,B,C与其余列的比较。
我能想到的一种方式是,
从A,B,C中删除NA行
df = df[np.isfinite(df['A'])]
df = df[np.isfinite(df['B'])]
df = df[np.isfinite(df['C'])]
并获取所有列的NA计数并检查总行数
df.isnull().sum()
并删除匹配的计数。
有更好更有效的方法吗?
由于
答案 0 :(得分:0)
不要删除行,只需选择其他没有A,B,C同时等于NaN的行。
mask = df[["A", "B", "C"]].isnull().all(axis=1)
df = df[~mask]