gpt4 book ai didi

python - 将时间序列数据中的行转换为列

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:27 24 4
gpt4 key购买 nike

假设我有一个像

这样的时间序列
In [41]: df = pd.DataFrame(dict(names=list('abcaabcabbcc'), vals=np.random.randint(0, 10, 12)), index
...: =pd.date_range('2017-03-01', periods=12))

In [42]: df
Out[42]:
names vals
2017-03-01 a 2
2017-03-02 b 9
2017-03-03 c 6
2017-03-04 a 6
2017-03-05 a 5
2017-03-06 b 2
2017-03-07 c 3
2017-03-08 a 1
2017-03-09 b 1
2017-03-10 b 1
2017-03-11 c 1
2017-03-12 c 0

如何将 names 行转换为列标题,相应的 vals 位于列标题之下?例如

               a     b     c  
2017-03-01 2 nan nan
2017-03-02 nan 9 nan
...

我一直在玩弄 pd.melt 并尝试将 names 添加到索引,然后重置索引,以便它们以某种方式成为列,但是我很困。

最佳答案

您可以使用:

print (pd.pivot(index=df.index, columns=df['names'], values=df['vals']))

或者:

print (df.set_index('names', append=True)['vals'].unstack())
names a b c
2017-03-01 4.0 NaN NaN
2017-03-02 NaN 0.0 NaN
2017-03-03 NaN NaN 3.0
2017-03-04 8.0 NaN NaN
2017-03-05 0.0 NaN NaN
2017-03-06 NaN 0.0 NaN
2017-03-07 NaN NaN 9.0
2017-03-08 6.0 NaN NaN
2017-03-09 NaN 6.0 NaN
2017-03-10 NaN 0.0 NaN
2017-03-11 NaN NaN 3.0
2017-03-12 NaN NaN 9.0

print (df.reset_index().pivot_table(index='index', columns='names', values='vals'))

关于python - 将时间序列数据中的行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com