根据相似列的值在一列中填充NA值
Fill the NA value in one column according to values of similar columns
我想在给定值中填充 nan 的值,如下所示:
df = pd.DataFrame({'A' : ['aa', 'bb', 'cc', 'aa'],
'B': ['xx', 'yy', 'zz','xx'],
'C': ['2', '3','8', np.nan]})
print (df)
A B C
aa xx 2
bb yy 3
cc zz 8
aa xx NaN
预期输出:
A B C
aa xx 2
bb yy 3
cc zz 8
aa xx 2
由于 A 列和 B 列在第三列中的值为 2,因此最后一行的 C 列中也应为 2。
使用 GroupBy.ffill
with DataFrame.sort_values
and DataFrame.sort_index
NaN
秒到组结束:
df['C'] = df.sort_values(['A','B','C']).groupby(['A','B'])['C'].ffill().sort_index()
print (df)
A B C
0 aa xx 2
1 bb yy 3
2 cc zz 8
3 aa xx 2
另一种每组向前和向后填充的解决方案:
df['C'] = df.groupby(['A','B'])['C'].apply(lambda x: x.ffill().bfill())
先尝试 sort_values 将 Nan 放在最后,然后使用 group by 和 ffill()
df.sort_values(by=['C'],inplace=True)
df = df.groupby(['A','B']).ffill()
A B C
0 aa xx 2
1 bb yy 3
2 cc zz 8
3 aa xx 2
我想在给定值中填充 nan 的值,如下所示:
df = pd.DataFrame({'A' : ['aa', 'bb', 'cc', 'aa'],
'B': ['xx', 'yy', 'zz','xx'],
'C': ['2', '3','8', np.nan]})
print (df)
A B C
aa xx 2
bb yy 3
cc zz 8
aa xx NaN
预期输出:
A B C
aa xx 2
bb yy 3
cc zz 8
aa xx 2
由于 A 列和 B 列在第三列中的值为 2,因此最后一行的 C 列中也应为 2。
使用 GroupBy.ffill
with DataFrame.sort_values
and DataFrame.sort_index
NaN
秒到组结束:
df['C'] = df.sort_values(['A','B','C']).groupby(['A','B'])['C'].ffill().sort_index()
print (df)
A B C
0 aa xx 2
1 bb yy 3
2 cc zz 8
3 aa xx 2
另一种每组向前和向后填充的解决方案:
df['C'] = df.groupby(['A','B'])['C'].apply(lambda x: x.ffill().bfill())
先尝试 sort_values 将 Nan 放在最后,然后使用 group by 和 ffill()
df.sort_values(by=['C'],inplace=True)
df = df.groupby(['A','B']).ffill()
A B C
0 aa xx 2
1 bb yy 3
2 cc zz 8
3 aa xx 2