无法执行基于时间的滚动操作 window pandas?总是给出 window 必须是整数
unable to perform time based rolling operations window pandas? Always gives window must be an integer
我的数据的形式是
{'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) 作为索引。 (不知道那样做有没有效率)
后来我也试过给data['transaction']['time']做索引。仍然,不起作用。
总是报错window must be an integer。
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()
我的数据的形式是
{'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) 作为索引。 (不知道那样做有没有效率)
后来我也试过给data['transaction']['time']做索引。仍然,不起作用。
总是报错window must be an integer。
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()