把groupby的专栏调回Pandas

daupos2t  于 2023-03-28  发布在  其他
关注(0)|答案(3)|浏览(148)

我在列a上执行groupby,然后是ffill,但是在groupby之后,列a消失了。结果df将只有列bc。有没有办法在groupby和ffill之后重新获得列a?我假设值将在过程中 Shuffle 。
如何在pandas中找回groupby列?

df = pd.DataFrame({'a':[1,1,2,2] ,  
                   'b': [12,np.nan,14, 13], 
                   'c' : [1, 2, np.nan, np.nan]
                 })
df

df.groupby('a').ffill()
u5rb5r59

u5rb5r591#

import pandas as pd

df = pd.DataFrame({'a':[1,1,2,2] ,  
                   'b': [12,np.nan,14, 13], 
                   'c' : [1, 2, np.nan, np.nan]
                 })

df[['b', 'c']] = df.groupby('a').ffill()

print(df)
a     b    c
0  1  12.0  1.0
1  1  12.0  2.0
2  2  14.0  NaN
3  2  13.0  NaN
vwkv1x7d

vwkv1x7d2#

这将 * 工作 *。

df.groupby('a').ffill().join(df.a)[['a', 'b', 'c']]

我不知道为什么当groupby返回一个类似索引(转换)的结果时,该列会消失。例如,cumsum也有同样的问题。我认为这可能与groupbygroup_keys参数有关,但我在将其设置为True时没有任何运气。

qojgxg4l

qojgxg4l3#

您可以使用以下命令强制所有列:

df.groupby('a')[list(df)].ffill()

# or
df.groupby('a')[df.columns].ffill()

# or
df.groupby(df['a'].to_numpy()).ffill()

输出:

a     b    c
0  1  12.0  1.0
1  1  12.0  2.0
2  2  14.0  NaN
3  2  13.0  NaN

相关问题