如何将前一行的值分配给当前?

时间:2021-07-26 09:06:06

标签: pandas

我有包含以下列的数据框:姓名、姓氏、消息、时间 此数据框按每列排序。我有 message = '!' 的行姓氏为空。所以我想分配给前一行的那一行姓氏。有可能吗?我试过了

mask = df.surname.isna() and df[['message']] = '!' 
df.loc[mask,'surname'] = df[[surname]].shift(-1)

但这不起作用

1 个答案:

答案 0 :(得分:0)

首先删除双 []message 进行比较 !,然后使用 DataFrame.loc 为每组的两侧由 name

print (df)
  name surname message
0   aa      ss      dd
1   aa     NaN       !
2  aa1      uu      dd
3  aa1     NaN      ii
4  aa2      rr      tt
5  aa2     NaN       !
6  aa2     NaN       !

mask = df.surname.isna() & (df['message'] == '!')
df['surname'] = np.where(mask, df.groupby('name')['surname'].ffill(), df['surname'])
print (df)
  name surname message
0   aa      ss      dd
1   aa      ss       !
2  aa1      uu      dd
3  aa1     NaN      ii
4  aa2      rr      tt
5  aa2      rr       !
6  aa2      rr       !

如果使用不带 shift-1 仅适用于掩码中有 Trues 的一行,如果在非匹配掩码前后存在,则在示例数据 row=1 中:

df['surname'] = np.where(mask, df['surname'].shift(), df['surname'])
print (df)
  name surname message
0   aa      ss      dd
1   aa      ss       !
2  aa1      uu      dd
3  aa1     NaN      ii
4  aa2     NaN      tt
5  aa2     NaN       !
6  aa2     NaN       !
相关问题