pandas数据框通过匹配列标题和值

时间:2018-11-15 09:54:03

标签: python pandas dataframe assign

我有一个像这样的数据框:

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

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

2 个答案:

答案 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