python - 填充奇怪的行为,当有重复的列名时
问题描述
我有一个如下的数据框
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)
它看起来像一个错误,然后我正在尝试应用,它返回预期的输出。
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
使用index
andffill
会创建额外的列?
解决方案
它确实看起来有问题。只是想注意,根据熊猫文档,该.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
推荐阅读
- ios - navigationBarItems 中的 SwiftUI NavigationButton
- javascript - 使用 Jquery 构建的平滑滚动功能难以正常运行
- firebase - 在颤振应用程序中添加 Firebase 分析时出错
- c# - 在 MainPage.xaml.cs 中使用 Android 特定代码
- flutter - 退出App后如何防止视频播放器出现白屏?
- java - Java 二进制文件的版本控制
- firebase - 如何在 EmberFire 中查询子集合?
- php - 如何用特定的 url 元素替换脚本的一部分?
- javascript - 为什么我在创建新组件时在 vue.js 中出现未找到依赖项的错误?
- linux - linux perf 是否使用 kprobe 对每个内核函数进行详细测量细分?