首页 > 解决方案 > 填充奇怪的行为,当有重复的列名时

问题描述

我有一个如下的数据框


df=pd.DataFrame({'A':[np.nan,1,1,np.nan],'B':[2,np.nan,2,2]},index=[1,1,2,2])
df.columns=['A','A']

现在我想要ffill的值groupbyindex首先我尝试

df.groupby(level=0).ffill()

返回错误代码

> ValueError: Buffer has wrong number of dimensions (expected 1, got 2)

它看起来像一个错误,然后我正在尝试应用,它返回预期的输出。

df.groupby(level=0).apply(lambda x : x.ffill())
     A    A
1  NaN  2.0
1  1.0  2.0
2  1.0  2.0
2  1.0  2.0

供您参考,当列是唯一的时,它可以正常工作 Q2),但是,创建一个索引列并且列名是NaN

df.columns=['C','D']
df.groupby(level=0).ffill()
   NaN    C    D
1    1  NaN  2.0
1    1  1.0  2.0
2    2  1.0  2.0
2    2  1.0  2.0

问题:
1 这是一个错误吗?为什么 apply 仍然可以在这种情况下工作?

2 为什么groupby使用indexandffill会创建额外的列?

标签: pythonpandas

解决方案


它确实看起来有问题。只是想注意,根据熊猫文档,该.ffill()方法是.fillna(method='ffill'). 使用后者会为您在 pandas 版本中的两个示例生成预期的输出,0.23.4而不会出现任何错误或附加列。希望有帮助。

import pandas as pd
import numpy as np
df=pd.DataFrame({'A':[np.nan,1,1,np.nan],'B':[2,np.nan,2,2]},index=[1,1,2,2])

df.columns=['A','A'] #dup column names
df.groupby(level=0).fillna(method='ffill')

Output:
    A   A
1   NaN 2.0
1   1.0 2.0
2   1.0 2.0
2   1.0 2.0

推荐阅读