Python:如何通过切片来替换groupN后通过选择替换NaN值来选择某些列?

时间:2019-03-09 16:11:16

标签: python python-3.x pandas dataframe group-by

假设我们的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建议的解决方案替换NoneCol3Col4列中的Col5值}}在第一列groupby上。

我的方式是

Col1

但是手动提到这些列需要很多工作。

因此,我想知道如何通过切片选择列df = df.groupby('Col1')['Col3','Col4','Col5'].ffill().bfill() Col3Col4

谢谢

2 个答案:

答案 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()