gpt4 book ai didi

python - 如何生成一个新的 Pandas 数据框,将一些行压缩到新列中?

转载 作者:行者123 更新时间:2023-12-01 02:40:22 24 4
gpt4 key购买 nike

我对 pandas DataFrame 相当陌生,但我一直在观看教程并阅读有关它的文档,但我无法完全找出一种方法来完成我想要的事情。我有一个按时间戳索引的 DataFrame,我想将某个时期放入一行中。以图形方式表示:

    # start date of the series
start_date='20130101'
# range of dates
dates = pd.date_range(start_date, periods=6)

# random dataframe
df = pd.DataFrame([["(1,1)","(1,2)"],
["(2,1)","(2,2)"],
["(3,1)","(3,2)"],
["(4,1)","(4,2)"],
["(5,1)","(5,2)"],
["(6,1)","(6,2)"]], index=dates, columns=list('AB'))
print(df)
# range of bucketing periods, in this case I will get just three periods covering two days each
rng = pd.period_range(start_date, periods=3,freq='2D')

这会导致

              A      B
2013-01-01 (1,1) (1,2)
2013-01-02 (2,1) (2,2)
2013-01-03 (3,1) (3,2)
2013-01-04 (4,1) (4,2)
2013-01-05 (5,1) (5,2)
2013-01-06 (6,1) (6,2)

我想要做的是现在生成一个新的数据帧,其中我将 rng = pd.period_range(start_date, period=3,freq='2D') 中的周期作为索引,并且与该时期相对应的行作为连续列:

              A      B      A1      B1
2013-01-01 (1,1) (1,2) (2,1) (2,2)
2013-01-03 (3,1) (3,2) (4,1) (4,2)
2013-01-05 (5,1) (5,2) (6,1) (6,2)

Api 中是否有任何方法可以用来执行此操作?我想我还需要生成新标签,如 A1、B1。

另外,经过我多想,我可能可以这样做

              A      A1      B      B1
2013-01-01 (1,1) (2,1) (1,2) (2,2)
2013-01-03 (3,1) (4,1) (3,2) (4,2)
2013-01-05 (5,1) (6,1) (5,2) (6,2)

最佳答案

其中一种方法是将周期转换为 timestamp 并创建一个数据帧,然后将它们连接起来,使用 ffill 方法填充 NaNreshape based on index通过将新的时间戳列设置为索引,即

n = pd.DataFrame(rng.to_timestamp()).set_index(rng.to_timestamp())

result = pd.concat([df, n], axis=1).fillna(method='ffill').set_index(0)

result = result.set_index(result.groupby(level=0).cumcount(), append=True).unstack()

输出

                A             B                       0      1      0      10                                     2013-01-01  (1,1)  (2,1)  (1,2)  (2,2)2013-01-03  (3,1)  (4,1)  (3,2)  (4,2)2013-01-05  (5,1)  (6,1)  (5,2)  (6,2)In [1024]:

关于python - 如何生成一个新的 Pandas 数据框,将一些行压缩到新列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45780510/

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