pandas 数据框通过匹配列 header 和值向单元格添加值
pandas dataframe adding value to a cell by matching column header and value
我有一个这样的数据框:
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
如果已经存在一些值,新值应该替换它
布尔索引是 Pandas 的基础:阅读 Indexing and Selecting Data。
对于您的问题,您可以构造布尔掩码并将它们组合以更新值 pd.DataFrame.loc
:
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
由于最昂贵的部分通常是构建布尔级数,因此最好在可能的情况下重复使用它们。
或者更容易阅读、更简洁的方法:
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
我有一个这样的数据框:
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
如果已经存在一些值,新值应该替换它
布尔索引是 Pandas 的基础:阅读 Indexing and Selecting Data。
对于您的问题,您可以构造布尔掩码并将它们组合以更新值 pd.DataFrame.loc
:
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
由于最昂贵的部分通常是构建布尔级数,因此最好在可能的情况下重复使用它们。
或者更容易阅读、更简洁的方法:
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