从长轴到宽轴 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
参数对重复值应用操作:mean
、first
、last
、max
、min
、sum
或自定义函数。
例如,使用找到的第一个值:
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
我在 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
参数对重复值应用操作:mean
、first
、last
、max
、min
、sum
或自定义函数。
例如,使用找到的第一个值:
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