我的数据采用格式
{'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()