对 Dataframe 列Pandas应用条件

wfauudbj  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(168)

如果我有这样的 Dataframe :

date          A             B            C
01.01.2003    01.01.2003   
02.01.2003
03.01.2003                03.01.2003
05.01.2003    05.01.2003
06.01.2003                06.01.2003
08.01.2003    08.01.2003  08.01.2003    08.01.2003

如果A、B、C列中的值相等,我想删除A和B列中的值,保留C列。因此输出

date          A             B            C
01.01.2003    01.01.2003   
02.01.2003
03.01.2003                03.01.2003
05.01.2003    05.01.2003
06.01.2003                06.01.2003
08.01.2003                             08.01.2003

我应用了np.where,但错误显示条件不适用于时间戳

np.where((df['A'] & df ['B'] == df['C]'),
           df['A'] & df['B], '')

谢谢你的线索

a64a0gku

a64a0gku1#

借助all使用布尔索引:

df.loc[df[['A', 'B']].eq(df['C'], axis=0).all(axis=1), ['A', 'B']] = np.nan

输出:

date           A           B           C
0  01.01.2003  01.01.2003        None        None
1  02.01.2003        None        None        None
2  03.01.2003         NaN  03.01.2003        None
3  05.01.2003  05.01.2003        None        None
4  06.01.2003         NaN  06.01.2003        None
5  08.01.2003         NaN         NaN  08.01.2003
rm5edbpk

rm5edbpk2#

您可以使用pandas.DataFrame.loc,行选择有两个条件,即A=B和B=C,并将[None]分配给A和B字段。

df.loc[(df['A']==df['B']) & (df['B']==df['C']), ['A', 'B']] = [[None, None]]

产出

date            A           B           C
0  01.01.2003  01.,01.2003        None        None
1  02.01.2003         None        None        None
2  03.01.2003         None  03.01.2003        None
3  05.01.2003   05.01.2003        None        None
4  06.01.2003         None  06.01.2003        None
5  08.01.2003         None        None  08.01.2003

查看here演示。

相关问题