如何从此数据制作数据透视表?

时间:2019-07-19 16:25:51

标签: python pandas

我有类似

的数据
data = {
    "Person": ["A", "A", "A", "B", "B", "B"],
    "Month": [1, 2, 3, 1, 2, 3],
    "Value 1": [5, 6, 7, 8, 9, 10],
    "Value 2": [10, 11, 12, 13, 5, 4]

}

df = pd.DataFrame(data)

我希望它看起来像:

  Person   Value    Month 1  Month 2  Month 3  
0      A   1        5        6       7         
0      A   2        10       11      12        
0      B   1        8        9       10       
0      B   2        13       5       4        
...

我该怎么做?

2 个答案:

答案 0 :(得分:1)

IIUC,可以pivot_table + unstack

df.pivot_table(columns='Month', index='Person')\
  .unstack()\
  .reset_index()\
  .rename(columns={'level_0': 'Value'})\
  .pivot_table(columns='Month', index=['Person', 'Value'])

输出

        Month          1       2        3       5       6
Person  Value                   
A       Value   1      5.0      6.0     7.0     NaN     NaN
        Value   2      10.0     11.0    12.0    NaN     NaN
B       Value   1      NaN      NaN     NaN     8.5     10.0
        Value   2      NaN      NaN     NaN     9.0     4.0

答案 1 :(得分:0)

另一个使用melt

的选项
df1=df.melt(['Person','Month'])\
.pivot_table(index=['Person','variable'], columns=['Month'])
df1.index.rename(['Person','Value'], inplace=True)
df1.columns=df1.columns.droplevel()

        Month   1   2   3   5   6
Person  Value                   
A   Value 1     5.0 6.0 7.0 NaN NaN
    Value 2     10.0 11.0 12.0 NaN NaN
B   Value 1     NaN NaN NaN 8.5 10.0
    Value 2     NaN NaN NaN 9.0 4.0