kin*_*ing 5 python dictionary numpy dataframe pandas
我有一个pandas
数据框如下:
date | Item | count
------------------------------------
2016-12-06 10:45:08 | Item1 | 60
2016-12-06 10:45:08 | Item2 | 145
2016-12-06 09:45:00 | Item1 | 60
2016-12-06 09:44:54 | Item3 | 600
2016-12-06 09:44:48 | Item4 | 15
2016-12-06 11:45:08 | Item1 | 60
2016-12-06 10:45:08 | Item2 | 14
2016-11-06 09:45:00 | Item1 | 62
2016-11-06 09:44:54 | Item3 | 6
2016-11-06 09:44:48 | Item4 | 15
Run Code Online (Sandbox Code Playgroud)
我试图通过让我们说一天中的小时(或稍后的一天)知道以下统计数据来组合项目:每天销售的项目列表,例如:
2016-12-06
,09:00:00
到10:00:00
,Item1,Item3和Item4被出售; 等等.2016-12-06
,Item1,Item2,Item3,Item4(独特商品)已售出.虽然我远远没有获取这些统计数据,但我仍然坚持按时间分组.最初,print df.dtypes
显示
date object
Item object
count int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
因此,我使用以下代码行将date列转换为pandas日期对象.
df['date'] = pd.to_datetime(df['date'])
Run Code Online (Sandbox Code Playgroud)
现在,print df.dtypes
收益率:
date datetime64[ns]
Item object
count int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试通过执行以下代码行date
来使用列进行分组时TimeGrouper
from pandas.tseries.resample import TimeGrouper
print df.groupby([df['date'],pd.TimeGrouper(freq='Min')])
Run Code Online (Sandbox Code Playgroud)
我得到以下内容TypeError
.根据此处或此处给出的建议,使用pd.to_datetime进行转换应该可以解决此问题.
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题,继续我正在寻找的统计数据.任何有关解决此错误并使用TimeGrouper以字典格式(或任何更有意义的内容)搜索统计信息的提示都将非常受欢迎.
您可以使用groupby
by numpy array
- datetimes 删除minutes
and seconds
:
print (df['date'].values.astype('<M8[h]'))
['2016-12-06T10' '2016-12-06T10' '2016-12-06T09' '2016-12-06T09'
'2016-12-06T09' '2016-12-06T11' '2016-12-06T10' '2016-11-06T09'
'2016-11-06T09' '2016-11-06T09']
print (df.groupby(df['date'].values.astype('<M8[h]')).Item.unique())
2016-11-06 09:00:00 [Item1, Item3, Item4]
2016-12-06 09:00:00 [Item1, Item3, Item4]
2016-12-06 10:00:00 [Item1, Item2]
2016-12-06 11:00:00 [Item1]
Name: Item, dtype: object
print (df.groupby(df['date'].values.astype('<M8[h]')).Item
.apply(lambda x: x.unique().tolist()).to_dict())
{Timestamp('2016-11-06 09:00:00'): ['Item1', 'Item3', 'Item4'],
Timestamp('2016-12-06 09:00:00'): ['Item1', 'Item3', 'Item4'],
Timestamp('2016-12-06 10:00:00'): ['Item1', 'Item2'],
Timestamp('2016-12-06 11:00:00'): ['Item1']}
Run Code Online (Sandbox Code Playgroud)
print (df.groupby(df['date'].values.astype('<M8[D]')).Item
.apply(lambda x: x.unique().tolist()).to_dict())
{Timestamp('2016-11-06 00:00:00'): ['Item1', 'Item3', 'Item4'],
Timestamp('2016-12-06 00:00:00'): ['Item1', 'Item2', 'Item3', 'Item4']}
Run Code Online (Sandbox Code Playgroud)
print (df.groupby(df['date'].dt.round('h')).Item
.apply(lambda x: x.unique().tolist()).to_dict())
{Timestamp('2016-11-06 10:00:00'): ['Item1', 'Item3', 'Item4'],
Timestamp('2016-12-06 12:00:00'): ['Item1'],
Timestamp('2016-12-06 10:00:00'): ['Item1', 'Item3', 'Item4'],
Timestamp('2016-12-06 11:00:00'): ['Item1', 'Item2']}
print (df.groupby(df['date'].dt.round('d')).Item
.apply(lambda x: x.unique().tolist()).to_dict())
{Timestamp('2016-11-06 00:00:00'): ['Item1', 'Item3', 'Item4'],
Timestamp('2016-12-06 00:00:00'): ['Item1', 'Item2', 'Item3', 'Item4']}
Run Code Online (Sandbox Code Playgroud)