为了账号安全,请及时绑定邮箱和手机立即绑定

大熊猫“枢轴”操作的完全相反

大熊猫“枢轴”操作的完全相反

MMTTMM 2021-06-14 09:06:51
我有一个粗略格式的熊猫数据框print(df)    Time  GroupA  GroupB  Value1  Value20  100.0     1.0     1.0    18.0     0.01  100.0     1.0     2.0    16.0     0.02  100.0     2.0     1.0    18.0     0.03  100.0     2.0     2.0    10.0     0.0其中Time是一个计数变量/时间戳,GroupA和GroupB是类别,以及Value1和Value2是数值量。此代码段创建了一个模型数据框:import numpy as npvalues = np.zeros(shape=(4,5))values[:,0] = 100values[:,1] = [1]*2 + [2]*2values[:,2] = [1,2]*2values[:,3] = np.random.randint(low=10,high=20,size=(4))df = pd.DataFrame(values,columns=['Time','GroupA','GroupB','Value1','Value2'])加载一些数据后,我想计算并填写Value2. 当它发生时(顺便说一句,因为Value2是Value1每个现有 ( GroupA, GroupB) 对中的时间序列函数),我发现通过首先将我的数据转换为以下形式来计算这些值最容易:df_pivot = df.pivot_table(index='Time',columns=['GroupA','GroupB'],values=['Value1','Value2'], fill_value=0.0)然后在一些不相关的代码之后我填写了值print(df_pivot)       Value1             Value2            GroupA    1.0     2.0        1.0     2.0    GroupB    1.0 2.0 1.0 2.0    1.0 2.0 1.0 2.0Time                                        100.0      13  16  16  10     27  20  28  20现在我想将其“反透视”为df. 我可以通过循环df、查找 中的值df_pivot并填充它来手动执行此操作,但我更喜欢使用内置函数。尝试使用 的变体时df.melt,由于df_pivot的分层列存在问题,我无法执行此反转。我最好的尝试是dfm = df_pivot.reset_index().melt(id_vars="Time")dfm.columns.values[1] = "HACK"dfm = dfm.pivot_table(index=["Time","GroupA","GroupB"],columns="HACK",values="value").reset_index()产生数据框print(dfm)HACK   Time  GroupA  GroupB  Value1  Value20     100.0     1.0     1.0      13      271     100.0     1.0     2.0      16      202     100.0     2.0     1.0      16      283     100.0     2.0     2.0      10      20这有效,但并不让我觉得是最好的解决方案,或者非常便携(为什么melt会产生“NaN”列名?为什么我要手动查找该列的索引并重命名它?为什么我必须枢轴以撤消枢轴?)虽然尝试并查看文档和示例以寻找替代方案,但我不知所措。该melt函数有一个col_level看起来应该有帮助的参数,但我为此使用的任何有效值只会导致数据丢失(丢失“时间”、“组 A”或“组 B”数据)。
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

我认为stack更直接


df_pivot.stack([1,2]).reset_index()

Out[8]: 

    Time  GroupA  GroupB  Value1  Value2

0  100.0     1.0     1.0      13       0

1  100.0     1.0     2.0      13       0

2  100.0     2.0     1.0      12       0

3  100.0     2.0     2.0      11       0


查看完整回答
反对 回复 2021-06-15
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信