1
考慮以下合成例:在熊貓,按日期從DatetimeIndex
import pandas as pd
import numpy as np
np.random.seed(42)
ix = pd.date_range('2017-01-01', '2017-01-15', freq='1H')
df = pd.DataFrame(
{
'val': np.random.random(size=ix.shape[0]),
'cat': np.random.choice(['foo', 'bar'], size=ix.shape[0])
},
index=ix
)
其產生以下形式的表:
cat val
2017-01-01 00:00:00 bar 0.374540
2017-01-01 01:00:00 foo 0.950714
2017-01-01 02:00:00 bar 0.731994
2017-01-01 03:00:00 bar 0.598658
2017-01-01 04:00:00 bar 0.156019
現在,我要計數的數量和每個類別和日期的實例平均值。
以下groupby
,幾乎是完美的:
df.groupby(['cat',df.index.date]).agg({'val': ['count', 'mean']})
返回:
val
count mean
cat
bar 2017-01-01 16 0.437941
2017-01-02 16 0.456361
2017-01-03 9 0.514388...
與這一個問題,是該指數的第二級變成字符串,而不是date
。 第一個問題:爲什麼會發生?我怎樣才能避免它?
接下來,我試過的groupby
和resample
組合:
df.groupby('cat').resample('1d').agg({'val': 'mean'})
這裏,該指數是正確的,但我無法同時運行mean
和count
聚合。這是第二個問題:爲什麼
df.groupby('cat').resample('1d').agg({'val': ['mean', 'count']})
不起作用?
最後一個問題什麼是乾淨的方法來得到一個彙總(使用這兩種功能)查看和與date
類型的指數?
我檢查時序和'floor'解決方案是最快的 - [這裏](https://stackoverflow.com/a/45943387/2901002) – jezrael