【问题标题】:Iterating through pandas dataframe and appending to a list遍历 pandas 数据框并附加到列表
【发布时间】: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 天的行等等。

非常感谢您的帮助

【问题讨论】:

    标签: list pandas loops dataframe append


    【解决方案1】:

    reindexnp.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。
    • 我想我误读了这个问题。这会产生块,而不是重叠的滑动窗口。
    • 我从范围中删除了该步骤。它现在是一个滑动窗口,但它保留了原始索引。这可能是也可能不是我们想要的。
    猜你喜欢
    • 2017-10-23
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2019-08-20
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多