pandas dataframe通过匹配列标题和值向单元格添加值

2024-10-03 02:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

Num  A    B   C   D
1    wer
1    df
1    ffg
2    asd
2    vb
3    ncnc
3    oiji
4    qwe

我将首先基于Num过滤掉,假设我过滤Num = 1

^{pr2}$

现在我需要从一个变量中添加值,wer和{}相遇的单元格,类似地,ffg和{}

Num  A    B   C   D
1    wer      5
1    df
1    ffg          7

如果已经存在某个值,则应使用新值替换它


Tags: 数据dfnumvbwerasd新值pr2
2条回答

或者更容易阅读、更干净的方法:

df2=df[df['Num']==1]
df2.loc[df2['A']=='wer','C']=5
df2.loc[df2['A']=='ffg','D']=7

或要跳过警告,请按索引执行:

^{pr2}$

两种情况:

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

布尔索引是Pandas的基础:read 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

由于最昂贵的部分通常是构造布尔序列,因此在可能的情况下重用它们是很好的实践。在

相关问题 更多 >