python-3.x - MELT:不重复的多个值
问题描述
不能这么难。我有
df=pd.DataFrame({'id':[1,2,3],'name':['j','l','m'], 'mnt':['f','p','p'],'nt':['b','w','e'],'cost':[20,30,80],'paid':[12,23,45]})
我需要
import numpy as np
df1=pd.DataFrame({'id':[1,2,3,1,2,3],'name':['j','l','m','j','l','m'], 't':['f','p','p','b','w','e'],'paid':[12,23,45,np.nan,np.nan,np.nan],'cost':[20,30,80,np.nan,np.nan,np.nan]})
我有 45 列要反转。
我试过了
(df.set_index(['id', 'name'])
.rename_axis(['paid'], axis=1)
.stack().reset_index())
解决方案
编辑:我认为这里最简单的是按variable
列设置缺失值DataFrame.melt
:
df2 = df.melt(['id', 'name','cost','paid'], value_name='t')
df2.loc[df2.pop('variable').eq('nt'), ['cost','paid']] = np.nan
print (df2)
id name cost paid t
0 1 j 20.0 12.0 f
1 2 l 30.0 23.0 p
2 3 m 80.0 45.0 p
3 1 j NaN NaN b
4 2 l NaN NaN w
5 3 m NaN NaN e
使用lreshape
列表字典来指定哪些列'grouped'
在一起:
df2 = pd.lreshape(df, {'t':['mnt','nt'], 'mon':['cost','paid']})
print (df2)
id name t mon
0 1 j f 20
1 2 l p 30
2 3 m p 80
3 1 j b 12
4 2 l w 23
5 3 m e 45
推荐阅读
- vue.js - Vue3 高阶处理程序失败
- javascript - 我如何在页面加载时滚动到特定的 div
- python - 在 Windows 上安装 python selenium 包时遇到问题
- android - 当我尝试通过 recyclerView 中的 putExtra 发送对象时,我的应用程序不断崩溃
- angular - Angular 11 功能模块循环依赖
- hangfire - 为什么hangfire 作业会在多个服务器上运行?
- python - 对象没有属性“通道”
- javascript - onChange vs onInput?
- python - 如何交替使用 glob.glob("*PDF) 和 os.listdr("./directory")?
- c# - 用 ASP.NET MVC 5 中的值填充 PDF 字段