遍历 pandas 数据框并附加到列表
Posted
技术标签:
【中文标题】遍历 pandas 数据框并附加到列表【英文标题】:Iterating through pandas dataframe and appending to a list 【发布时间】:2018-10-28 10:02:27 【问题描述】:我有一个熊猫数据框 df
Date SKU Balance
0 1/1/2017 X1 8
1 2/1/2017 X2 45
2 3/1/2017 X1 47
3 4/1/2017 X2 16
4 5/1/2017 X1 14
5 6/1/2017 X2 67
6 7/1/2017 X2 9
8 8/1/2017 X1 66
9 9/1/2017 X1 158
我想打破它并将其附加到列表中,以便列表中的每个项目都是数据框 4 天的集合
举例
列表[1]
Date SKU Balance
0 1/1/2017 X1 8
1 2/1/2017 X2 45
2 3/1/2017 X1 47
3 4/1/2017 X2 16
列表[2]
Date SKU Balance
0 2/1/2017 X2 45
1 3/1/2017 X1 47
2 4/1/2017 X2 16
3 5/1/2017 X1 14
目前我只能通过以下代码为每个列表附加一天
dr = pd.date_range('20170101','20170109')
list=[]
for d in dr:
list.append(df.loc[df.Date.isin([d])])
如上所述,如何在一个列表中从第一天开始追加 4 天并将其循环到第二天,再追加 4 天的行等等。
非常感谢您的帮助
【问题讨论】:
【参考方案1】:将reindex
和np.r_
与列表理解一起使用:
l = [df.reindex(np.r_[i:i+4]) for i in range(len(df))]
【讨论】:
@Wen 谢谢。来自您的高度赞扬。 谢谢斯科特,太棒了 @AhamedMoosa 谢谢。【参考方案2】:你可以试试np.roll
l=[]
a=df.index.values
for x in a:
l.append(df.loc[a[:4]])
a=np.roll(a,-1)
【讨论】:
谢谢文,不胜感激,我会接受@Scott 的回答。希望你不要介意 @AhamedMoosa 当然~如果我是你,我也会接受他的回答:-) :) 谢谢哥们【参考方案3】:在列表理解中切片。
ls = [df.loc[i:i+3] for i in range(len(df))]
【讨论】:
@ScottBoston,我确实先对此进行了测试。你能说得更具体点吗? ls[0] 是正确的 0:3,但 ls[1] 应该是 1:4 而不是 4:8。 我想我误读了这个问题。这会产生块,而不是重叠的滑动窗口。 我从范围中删除了该步骤。它现在是一个滑动窗口,但它保留了原始索引。这可能是也可能不是我们想要的。以上是关于遍历 pandas 数据框并附加到列表的主要内容,如果未能解决你的问题,请参考以下文章