我对pandas DataFrame相当新,但我一直在观看教程和阅读有关它的文档,我无法完全找到一种方法来做我想要的。我有一个按时间戳索引的DataFrame,我想将一段时间换成一行。图形:
<div class="d1">
<p>Items:</p>
<lu>
<li>item1</li>
<li>item2</li>
<li><span class="s1">item3</span></li>
</lu>
</div>
这导致
# 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, periods=3,freq='2D')
Api中有什么方法可以用来做这个吗? 我想我还需要生成新的标签,如A1,B1。
另外,在我想了一下之后,我可以用
做 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)
答案 0 :(得分:2)
其中一种方法是将期间转换为timestamp
并制作数据框,然后通过NaN
方法将ffill
与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()
方法相结合,并通过设置新的时间戳来reshape based on index列作为索引即
reqsByCA(ca.id.get) += req
输出
A B 0 1 0 1 0 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]: