Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 Pandas DataFrame:如何在滚动窗口上设置联合聚合_Python_Pandas_Set_Union_Rolling Computation - Fatal编程技术网

Python Pandas DataFrame:如何在滚动窗口上设置联合聚合

Python Pandas DataFrame:如何在滚动窗口上设置联合聚合,python,pandas,set,union,rolling-computation,Python,Pandas,Set,Union,Rolling Computation,我有一个数据框,其中一列包含ID集,另一列包含日期: 将熊猫作为pd导入 df=pd.DataFrame(['2018-01-01',{1,2,3}], ['2018-01-02', {3}], ['2018-01-03', {3, 4, 5}], ['2018-01-04', {5, 6}]], 列=['timestamp','ids']) df['timestamp']=pd.to_datetime(df['timestamp']] df.set_索引('timestamp',inplace

我有一个数据框,其中一列包含ID集,另一列包含日期:

将熊猫作为pd导入
df=pd.DataFrame(['2018-01-01',{1,2,3}],
['2018-01-02', {3}],
['2018-01-03', {3, 4, 5}],
['2018-01-04', {5, 6}]],
列=['timestamp','ids'])
df['timestamp']=pd.to_datetime(df['timestamp']]
df.set_索引('timestamp',inplace=True)
身份证
时间戳
2018-01-01     {1, 2, 3}
2018-01-02     {3}
2018-01-03     {3, 4, 5}
2018-01-04     {5, 6}
我正在寻找的是一个功能,可以给我的ID为过去x天每天。假设x=3,我希望结果是:

ids
时间戳
2018-01-01     {1, 2, 3}
2018-01-02     {1, 2, 3}
2018-01-03     {1, 2, 3, 4, 5}
2018-01-04     {3, 4, 5, 6}
我试过了

df.rolling(3.agg)(set.union)
但这会导致以下错误:

回溯(最近一次呼叫最后一次):
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第222行,在\u prep\u值中
值=\u确保\u浮动64(值)
文件“pandas\\u libs\algos\u common\u helper.pxi”,第3182行,在pandas.\u libs.algos.64中
文件“pandas\\u libs\algos\u common\u helper.pxi”,第3187行,在pandas.\u libs.algos.64中
TypeError:float()参数必须是字符串或数字,而不是“set”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第1561行,总计
返回超级(滚动、自)。聚合(arg、*args、**kwargs)
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第321行,总计
返回self.apply(arg,raw=False,args=args,kwargs=kwargs)
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第1580行,在apply中
func,raw=raw,args=args,kwargs=kwargs)
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第1003行,在apply中
中心=假,原始=原始)
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第844行,在应用中
值=自身值(b.值)
文件“C:\Users\m.manhertz\Envs\demo-8EG6nosu\lib\site packages\pandas\core\window.py”,第225行,以_prep_值表示
“”.format(values.dtype))
TypeError:无法处理此类型->对象

Pandas的设计目的不是在
pd.Series
对象中保存诸如
列表
集合
目录
等可编辑项。因此,您的逻辑是不可矢量化的。您的最佳选择可能是列出以下内容:

import pandas as pd

df = pd.DataFrame([['2018-01-01', {1, 2, 3}],
                   ['2018-01-02', {3}],
                   ['2018-01-03', {3, 4, 5}],
                   ['2018-01-04', {3, 6}]],
                  columns=['timestamp', 'ids'])

df['timestamp'] = pd.to_datetime(df['timestamp'])
df.set_index('timestamp', inplace=True)

df['ids'] = [set.union(*df.iloc[max(0, i-2): i+1, 0]) for i in range(len(df.index))]

print(df)

                        ids
timestamp                  
2018-01-01        {1, 2, 3}
2018-01-02        {1, 2, 3}
2018-01-03  {1, 2, 3, 4, 5}
2018-01-04     {3, 4, 5, 6}

嗯,这有点令人失望。尽管如此,这个解决方案还是有效的。您可能需要澄清如何调整列表对x的其他值的理解,例如对于
x=10
,对于范围内的i(len(df.index)),它将是
[set.union(*df.iloc[max(0,i-9):i+1,0])