以下是一个数据框:
A B C
ABC [0,3] NaN
ABC NaN No
XYZ NaN Yes
ABC [2] [str,'str']
XYZ [4,6] NaN
PQR NaN NaN
PQR [] NaN
123 1 ["str2"]
PQR NaN NaN
现在我想用同一组中的值替换NaN值,即B2中的ABC'NaN'显示用[0,3]或[2]替换。然后C5中的XYZ“ NaN”值应为“是”,而其他XYZ C3为“是”。 因此,不应存在任何NaN值,而将所有NaN替换为由groupby([CoulmnA])所在的同一groupby()成员存在于同一列中的值。
答案 0 :(得分:0)
此行可能有效:
df.groupby('A')['B'].apply(lambda g: g.ffill().bfill())
更新说明:它将B列按A值分组,然后用在该组中找到的非null值向前和向后填充。如果您不在意要使用的值 (如果有> 1个选项),这将起作用。
答案 1 :(得分:0)
按A
分组,然后填写其他列
df[['C', 'B']] = ndf.sort_values('A').groupby('A').agg({'B': 'ffill', 'C': 'ffill'}).bfill()
A B C
0 ABC [0,3] No
1 ABC [0,3] No
2 XYZ [4,6] Yes
3 ABC [2] [str,'str']
4 XYZ [4,6] Yes
5 PQR [] Yes
6 PQR [] Yes
7 123 1 ["str2"]
8 PQR [] Yes
您必须ffill
和bfill
才能替换下一个/上一个索引中的NaN,请参阅fillna