从长轴到宽轴 pandas

From long to wide pivot in pandas

我在 Python 中有以下数据集数据:

            Fac  y
Date        
2017-06-19  A   0.350
2017-06-20  A   1.220
2017-06-21  A   8.730
2017-06-22  A   9.340
2017-06-23  A   4.300
... ... ...
2022-01-25  Z   3.144
2022-01-26  Z   2.278
2022-01-27  Z   1.352
2022-01-28  Z   0.312
2022-01-31  Z   0.312

并且我想将它们从长旋转到更宽的列,以具有其 Fac 类别的名称并包含与每个类别对应的 y 值。

我试过了:

df = pd.pivot(Data, index='Date', columns='Fac', values='y')

但是 work.Any 没有帮助吗?

在你的代码中

df = pd.pivot(Data.reset_index(), index='Date', columns='Fat', values='y')

使用pivot_table:

df = pd.pivot_table(Data, 'y', Data.index, 'Fac')
print(df)

# Output
Fac            A      Z
Date                   
2017-06-19  0.35    NaN
2017-06-20  1.22    NaN
2017-06-21  8.73    NaN
2017-06-22  9.34    NaN
2017-06-23  4.30    NaN
2022-01-25   NaN  3.144
2022-01-26   NaN  2.278
2022-01-27   NaN  1.352
2022-01-28   NaN  0.312
2022-01-31   NaN  0.312

您也可以使用fill_value=0作为pivot_table的参数,将NaN替换为0:

df = pd.pivot_table(Data, 'y', Data.index, 'Fac', fill_value=0)
print(df)

# Output
Fac            A      Z
Date                   
2017-06-19  0.35  0.000
2017-06-20  1.22  0.000
2017-06-21  8.73  0.000
2017-06-22  9.34  0.000
2017-06-23  4.30  0.000
2022-01-25  0.00  3.144
2022-01-26  0.00  2.278
2022-01-27  0.00  1.352
2022-01-28  0.00  0.312
2022-01-31  0.00  0.312

注意:如果同一个 (Date, Fac) 有多个值,请使用 aggfunc 参数对重复值应用操作:meanfirstlastmaxminsum 或自定义函数。

例如,使用找到的第一个值:

df = pd.pivot_table(Data, 'y', Data.index, 'Fac', fill_value=0, aggfunc='first')
print(df)

# Output (doesn't change here because you have only unique (Date, Fac)
Fac            A      Z
Date                   
2017-06-19  0.35  0.000
2017-06-20  1.22  0.000
2017-06-21  8.73  0.000
2017-06-22  9.34  0.000
2017-06-23  4.30  0.000
2022-01-25  0.00  3.144
2022-01-26  0.00  2.278
2022-01-27  0.00  1.352
2022-01-28  0.00  0.312
2022-01-31  0.00  0.312