Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按滚动应用列表分组_Python_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 按滚动应用列表分组

Python 按滚动应用列表分组,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,下面是示例代码 df=pd.DataFrame({'A':['2020-04-28','2020-04-28','2020-04-29','2020-04-29','2020-04-30','2020-04-30'], ‘B’:[‘11-000-000-246_1064461’、‘30-000-015-488_1191035’、‘11-000-000-246_1064461’、‘30-000-015-488_1191035’、‘30-000-015-488_1191035’、‘11-000-24

下面是示例代码

df=pd.DataFrame({'A':['2020-04-28','2020-04-28','2020-04-29','2020-04-29','2020-04-30','2020-04-30'],
‘B’:[‘11-000-000-246_1064461’、‘30-000-015-488_1191035’、‘11-000-000-246_1064461’、‘30-000-015-488_1191035’、‘30-000-015-488_1191035’、‘11-000-246_1064461’],
‘C’:[47006522214700652723]、[4700653241]、[4700652784700656546]、[4700646464700645646]、[4700652748700659873、4700659238]]
})
我的数据框看起来像:

    A           B                       C
0   2020-04-28  11-000-000-246_1064461  [4700652221, 4700652723]
1   2020-04-28  30-000-015-488_1191035  [4700653241]
2   2020-04-29  11-000-000-246_1064461  []
3   2020-04-29  30-000-015-488_1191035  [4700652781, 4700656546]
4   2020-04-30  30-000-015-488_1191035  [4700646464, 4700645646]
5   2020-04-30  11-000-000-246_1064461  [4700652748, 4700659873, 4700659238]
我试图用这段代码在2天的滚动窗口中获得一个名为D的新列,其中包含所有C数组项的数组,但它不起作用:

df = df.groupby(['A','B'])['C'].rolling(2).apply(list).reset_index(name = 'D')
我需要这样的东西:

    A           B                       D
0   2020-04-28  11-000-000-246_1064461  Nan
1   2020-04-28  30-000-015-488_1191035  Nan
2   2020-04-29  11-000-000-246_1064461  [4700652221, 4700652723]
3   2020-04-29  30-000-015-488_1191035  [4700652781, 4700656546, 4700653241]
4   2020-04-30  30-000-015-488_1191035  [4700646464, 4700645646, 4700652781, 4700656546]
5   2020-04-30  11-000-000-246_1064461  [4700652748, 4700659873, 4700659238]
在列
B
上使用,然后在列
C
上使用。在此转换方法中,用于移动列,然后将列与其自身连接:

df['D'] = (
    df.groupby('B')['C']
    .transform(lambda s: s + s.shift(1))
)

df1 = df.drop('C', 1)


你能解释一下逻辑吗?你是怎么把
[4700652221,4700652723]
放在第三排的?是的!我从第一排得到了
[4700652221,4700652723]
。我用GROBYB.滚动来考虑不同类型的B柱。我曾考虑使用
extend()
append()
在数组中添加项,但我无法使用
rolling()
函数谢谢您提供的解决方案,但我有一个问题。你能帮助我吗?如果我需要增加我的肛门窗口到5天,10天或更多。。。我该如何解决这个问题?@VivianMarcello只需在轮班时调整参数,我想您需要轮班(4),为期5天。
# print(df1)
            A                       B                                                 D
0  2020-04-28  11-000-000-246_1064461                                               NaN
1  2020-04-28  30-000-015-488_1191035                                               NaN
2  2020-04-29  11-000-000-246_1064461                          [4700652221, 4700652723]
3  2020-04-29  30-000-015-488_1191035              [4700652781, 4700656546, 4700653241]
4  2020-04-30  30-000-015-488_1191035  [4700646464, 4700645646, 4700652781, 4700656546]
5  2020-04-30  11-000-000-246_1064461              [4700652748, 4700659873, 4700659238]