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

现在我需要从 werC 相遇的单元格的变量中添加值,类似于 ffgD

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