python-3.x - 熊猫列到行的转换不起作用?
问题描述
我们有以下熊猫数据框
我们需要转换成下面的数据框
在使用 pd.wide_to_long 命令时,我们遇到以下错误:-
ValueError: stubname can't be identical to a column name
正在使用此命令:-
pd.wide_to_long(df,['Org','City'],i=['First Name','Middle Name','Last Name','Years'],j='drop').reset_index(level=[0,1]
解决方案
对我来说,您的解决方案有效,还添加了参数stubnames
。可能是旧版 pandas 中的错误,链接,因此您可以尝试将 pandas 升级到最新版本:
df = pd.wide_to_long(df, stubnames=['Org','City'],
i=['First Name','Middle Name','Last Name','Years'],
j='drop').reset_index().drop('drop', 1)
print (df)
First Name Middle Name Last Name Years Org City
0 aa cc dd 2019 v n
1 aa cc dd 2019 m m
2 aa cc dd 2019 d n
3 aa cc dd 2019 p j
4 zz yy xx 2018 p n
5 zz yy xx 2018 q n
6 zz yy xx 2018 i d
7 zz yy xx 2018 NaN NaN
编辑:如果可能的话,数据中的一些重复是可能的,通过创建默认索引reset_index
并将列添加index
到i
变量:
print (df)
First Name Middle Name Last Name Years Org0 Org1 Org2 Org3 City0 City1 \
0 aa cc dd 2019 v m d p n m
1 zz yy xx 2018 p q i NaN n n
City2 City3
0 n j
1 d NaN
df = pd.wide_to_long(df.reset_index(), stubnames=['Org','City'],
i=['index','First Name','Middle Name','Last Name','Years'],
j='drop').reset_index().drop(['drop', 'index'], 1)
print (df)
First Name Middle Name Last Name Years Org City
0 aa cc dd 2019 v n
1 aa cc dd 2019 m m
2 aa cc dd 2019 d n
3 aa cc dd 2019 p j
4 zz yy xx 2018 p n
5 zz yy xx 2018 q n
6 zz yy xx 2018 i d
7 zz yy xx 2018 NaN NaN
推荐阅读
- angular - ng serve 不提供图像,但 npm start 工作正常
- angular - 如何配置我的 Angular 6 环境,以便能够在 Angular 6 中为 jQuery 使用 Kendo UI 网格?
- reactjs - 反应元素内的转义变量
- python - Django:创建一个带有间隙的文本以供输入
- docker - 多个微服务共享同一个数据库服务器(一个容器,多个数据库)
- sql - 是否可以在同一个查询中使用按“不同计数”分组的结果?
- python-3.x - 使用 Python (py-solc) 运行 Solidity 时出错
- asp.net - HttpContext.Current.User.Identity 突然停止在 Visual Studio 2017 中工作
- java - 如何在 Hibernate 的复合主键中自动增加 Id?
- mongodb - $nin 与 $expr