我有以下DataFrame:
df = pd.DataFrame({
'Branch' : 'A A A A A B'.split(),
'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(),
'Quantity': [1,3,5,8,9,3],
'Date' : [
DT.datetime(2013,1,1,13,0),
DT.datetime(2013,1,1,13,5),
DT.datetime(2013,10,1,20,0),
DT.datetime(2013,10,2,10,0),
DT.datetime(2013,12,2,12,0),
DT.datetime(2013,12,2,14,0),
]})
from pandas.tseries.resample import TimeGrouper
如何使用TimeGrouper在分支机构和20天内对这些数据进行分组?
我以前的所有尝试都失败了,因为我无法将TimeGrouper与groupby函数中的另一个参数组合在一起.
我非常感谢你的帮助.
谢谢
安迪
解决方法:
从这里的讨论:https://github.com/pydata/pandas/issues/3791
In [38]: df.set_index('Date').groupby(pd.TimeGrouper('6M')).apply(lambda x: x.groupby('Branch').sum())
Out[38]:
Quantity
Branch
2013-01-31 A 4
2014-01-31 A 22
B 3
还有一个更复杂的问题
In [55]: def testf(df):
....: if (df['Buyer'] == 'Mark').sum() > 0:
....: return Series(dict(quantity = df['Quantity'].sum(), buyer = 'mark'))
....: return Series(dict(quantity = df['Quantity'].sum()*100, buyer = 'other'))
....:
In [56]: df.set_index('Date').groupby(pd.TimeGrouper('6M')).apply(lambda x: x.groupby('Branch').apply(testf))
Out[56]:
buyer quantity
Branch
2013-01-31 A mark 4
2014-01-31 A other 2200
B other 300
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。