我有一个这样的数据框:
Month | Item | Count
1 | A | 2
| B | 2
| C | 1
2 | A | 1
| B | 1
我试图按月分组,并在一个月内计算,结果必须如下:
lastyear_df.groupby([(df['INVOICE_DATE2']).dt.month, df['STYLE']])['STYLE'].count()
我试过这个:
@Suite.SuiteClasses({testA.class, testB.class, testC.class, testB.class})
但它对我没用。
答案 0 :(得分:3)
这是一个班轮......
ans = df.groupby([df.INVOICE_DATE2.apply(lambda x: x.month), 'STYLE']).count()
这是输出
In [21]: ans
Out[21]:
INVOICE_DATE2
INVOICE_DATE2 STYLE
1 A 2
B 2
C 1
2 A 1
B 1
注意:此时您有一个分层索引,可以使用reset_index
ans = ans.reset_index(1)
STYLE INVOICE_DATE2
INVOICE_DATE2
1 A 2
1 B 2
1 C 1
2 A 1
2 B 1
如果您愿意,现在可以更改列名和索引名称:
ans.index.name = 'MONTH'
ans.columns = ['ITEM', 'COUNT']
答案 1 :(得分:2)
我认为你很接近,如果想要计算size
s:
NaN
d = {'INVOICE_DATE2':'Month','STYLE':'Item'}
df = (df.groupby([df['INVOICE_DATE2'].dt.month, 'STYLE'])
.size()
.reset_index(name='Count')
.rename(columns=d))
print (df)
Month Item Count
0 1 A 2
1 1 B 2
2 1 C 1
3 2 A 1
4 2 B 1
或count
count
仅NaN
s:
d = {'INVOICE_DATE2':'Month','STYLE':'Item'}
df = (df.groupby([df['INVOICE_DATE2'].dt.month, 'STYLE'])['STYLE']
.count()
.reset_index(name='Count')
.rename(columns=d))
print (df)
Month Item Count
0 1 A 2
1 1 B 2
2 1 C 1
3 2 A 1
4 2 B 1
最后如果在第一列中只需要一个唯一值:
df['Month'] = df['Month'].mask(df.duplicated('Month'),'')
print (df)
Month Item Count
0 1 A 2
1 B 2
2 C 1
3 2 A 1
4 B 1