假设我们的df如下
df = pd.DataFrame({ 'Col1' : [1, 1, 1, 2, 2, 2, 2],
'Col2' : [5, 6, 8, 3, 7, 8, 5],
'Col3' : [2, None, None, 3, None, None, 4],
'Col4' : [3, None,5, None, 8, None, 66],
'Col5': [None, 8, 6, None, 9, 6,None],
'Col6' : [3,5,2,5,2,7,9]})
我想在应用{{1之后,使用jjs in this post here建议的解决方案替换None
,Col3
和Col4
列中的Col5
值}}在第一列groupby
上。
我的方式是
Col1
但是手动提到这些列需要很多工作。
因此,我想知道如何通过切片选择列df = df.groupby('Col1')['Col3','Col4','Col5'].ffill().bfill()
,Col3
和Col4
?
谢谢
答案 0 :(得分:2)
此解决方案以您想要的方式填充所有NaN列:
df.groupby('Col1')[df.columns[df.isnull().any()]].ffill().bfill()
答案 1 :(得分:1)
TBH,我不确定我是否理解您的问题。
据我所知,您可以直接进行
df.groupby('Col1').ffill().bfill()
因为ffill()
和bfill()
只会更改没有NaN
的列。
现在,如果您事先知道需要填充/填充哪些列并希望减少详细程度,则可以将它们保存在cols
变量中
cols = ['Col3','Col4','Col5']
df[cols] = df.groupby('Col1')[cols].ffill().bfill()