我有一个像这样的数据框:
Num A B C D
1 wer
1 df
1 ffg
2 asd
2 vb
3 ncnc
3 oiji
4 qwe
我将首先基于Num
进行过滤,说我为Num = 1
进行过滤
Num A B C D
1 wer
1 df
1 ffg
现在我需要从wer
和C
相交的单元格的变量中添加值,类似于ffg
和D
Num A B C D
1 wer 5
1 df
1 ffg 7
如果已经存在某个值,则应使用新值替换它
答案 0 :(得分:1)
布尔索引是熊猫的基础:请阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date。
对于您的问题,您可以构造布尔型掩码并将其组合以使用Indexing and Selecting Data更新值:
num_mask = df['num'] == 1
df.loc[num_mask & df['A'].eq('wer'), 'C'] = 5
df.loc[num_mask & df['A'].eq('ffg'), 'D'] = 7
由于最昂贵的部分通常是构造布尔序列,因此在可能的情况下重用它们是一种好习惯。
答案 1 :(得分:1)
或者更容易阅读,更简洁的方法:
df2=df[df['Num']==1]
df2.loc[df2['A']=='wer','C']=5
df2.loc[df2['A']=='ffg','D']=7
或者跳过警告,按索引执行:
df2=df[df['Num']==1]
df2.loc[0,'C']=5
df2.loc[2,'D']=7
两种情况:
print(df2)
是:
Num A B C D
0 1 wer NaN 5.0 NaN
1 1 df NaN NaN NaN
2 1 ffg NaN NaN 7.0
如果要将其放回实际数据框:
df[df['Num']==1]=df2