无法执行基于时间的滚动操作窗口熊猫?Always give window必须是一个整数



我的数据采用格式

{'transaction': {'merchant': 'merchantA', 'amount': 20, 'time': '2019-02-13T10:00:00.000Z'}}
{'transaction': {'merchant': 'merchantA', 'amount': 90, 'time': '2019-02-13T11:00:00.000Z'}}
.
.
.

我想根据时间进行一些滚动操作。例如,过去"X"分钟内发生的交易数量等。

我试过多种方法,但都想不通。最初,我给出len(df.index(作为索引。(不知道这样做是否有效(

后来,我还尝试将数据['transaction']['time']作为索引。但仍然不起作用。

它总是给出错误窗口必须是一个整数。

df = pd.DataFrame()
df2 = pd.DataFrame()
for line in sys.stdin:
data = json.loads(line)
# df1 = pd.DataFrame(data["transaction"], index=[len(df.index)])
df1 = pd.DataFrame(data["transaction"], index=[data['transaction']['time']])
# df1 = pd.DataFrame.from_dict(data, orient='index')
df = df.append(df1)
ro = df.rolling('2min', on='time').count()
# ro = pd.get_dummies(df).rolling('2M').count()
print(ro)
# df2 = df.merge(ro)
# print(df2)
print(df)

我在这里错过了什么?

感谢

我认为您可以先创建字典列表,然后传递给DataFrame构造函数,将列time转换为日期时间,然后使用rolling:

out = [json.loads(line)["transaction"] for line in sys.stdin]
df = pd.DataFrame(out)
df['time'] = pd.to_datetime(df['time'])

然后:

df['new'] = df.rolling('2min', on='time')['amount'].count()
print (df)
merchant  amount                      time  new
0  merchantA      90 2019-02-13 11:00:00+00:00  1.0
1  merchantA      90 2019-02-13 11:00:00+00:00  2.0

编辑:

您的解决方案应该更改:

out = []
for line in sys.stdin:
data = json.loads(line)
out.append(data["transaction"])
df = pd.DataFrame(out)
df['time'] = pd.to_datetime(df['time'])
df['new'] = df.rolling('2min', on='time')['amount'].count()

最新更新