我有一个df
,例如:
col1 col2 col3 col4
0 a 1 jake
1 b 1 li
2 c 2 bob corn
3 d 2 pat
4 e 2 angie
5 f 1 jose pepper
6 g 3 juan
我必须做的是为col2重复并且在任何重复项中都存在col4的行更新col4的缺失值。
所以输出看起来像:
col1 col2 col3 col4
0 a 1 jake pepper
1 b 1 li pepper
2 c 2 bob corn
3 d 2 pat corn
4 e 2 angie corn
5 f 1 jose pepper
6 g 3 juan
有什么想法吗?
答案 0 :(得分:4)
我会用fillna
做一个groupby().transform
:
df['col4'] = df['col4'].fillna(df.groupby('col2')['col4'].transform('first'))
输出:
col1 col2 col3 col4
0 a 1 jake pepper
1 b 1 li pepper
2 c 2 bob corn
3 d 2 pat corn
4 e 2 angie corn
5 f 1 jose pepper
6 g 3 juan NaN
答案 1 :(得分:0)
尝试一下
dic = df[df["col4"].notnull()].set_index("col2")["col4"].to_dict()
df.loc[df["col4"].isnull(), "col4"]=df["col2"]
df["col4"] = df["col4"].replace(dic)
O / P:
col1 col2 col3 col4
0 a 1 jake pepper
1 b 1 li pepper
2 c 2 bob corn
3 d 2 pat corn
4 e 2 angie corn
5 f 1 jose pepper
6 g 3 juan 3
您可以通过找到3
来删除str.isdigit()
答案 2 :(得分:0)
可以这样实现:
dictionary = df[~(df.col4=='')].set_index("col2")["col4"].to_dict()
df.col4 = df.col2.apply(lambda x : dictionary[x] if x in dictionary.keys() else '')
输出:
| col1 | col2 | col3 | col4 |
|:-------|-------:|:-------|:-------|
| a | 1 | jake | pepper |
| b | 1 | li | pepper |
| c | 2 | bob | corn |
| d | 2 | pat | corn |
| e | 2 | angie | corn |
| f | 1 | jose | pepper |
| g | 3 | juan | |