当具有重复的列名称时,执行奇怪的行为

时间:2019-04-10 16:04:50

标签: python pandas

我有一个如下所示的DataFrame


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的值groupby index,首先尝试

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

哪个返回错误代码

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

它看起来像个错误,然后我尝试使用apply,它将返回预期的输出。

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

当列是唯一的时,供您参考, 恰好 (第二季度)很好,但是,创建一个索引列,列名称为NaN < / p>

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这是一个错误吗?为什么申请仍然可以在这种情况下使用?

     

2为什么groupbyindexffill一起创建附加列?

1 个答案:

答案 0 :(得分:0)

肯定看起来有问题。只是要注意,根据pandas documentation.ffill()方法是.fillna(method='ffill')的同义词。使用后者可以为熊猫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