我有一个销售报价的数据框,其中包含ID,日期和状态(获胜,丢失,未清)。
Quotes = pd.DataFrame({
'Quote_ID': [1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112],
'Quote_Date': ['2018-11-15', '2018-11-15', '2018-11-15', '2018-11-15',
'2018-11-15', '2018-11-16', '2018-11-16', '2018-11-16'],
'Status': ['won', 'open', 'won', 'lost', 'won', 'lost', 'lost', 'won']
})
print(Quotes)
Quote_ID Quote_Date Status
0 1105 2018-11-15 won
1 1106 2018-11-15 open
2 1107 2018-11-15 won
3 1108 2018-11-15 lost
4 1109 2018-11-15 won
5 1110 2018-11-16 lost
6 1111 2018-11-16 lost
7 1112 2018-11-16 won
我想要一个新的数据框,它可以计算每天的报价和每天赢得的报价数量:
Date Quotes Won
0 2018-11-15 5 3
1 2018-11-16 3 1
我可以使用以下方法计算每天的报价数量:
Quotes_Per_Day = Quotes['Quote_Date'].value_counts().sort_index()
但是我不确定如何计算给定日期的“获胜”次数。
答案 0 :(得分:1)
创建一个布尔序列,然后将其求和为groupby
(Quotes.assign(Won = Quotes.Status.eq('won'))
.groupby("Quote_Date").agg({'Won': 'sum', 'Quote_ID': 'nunique'})
.rename(columns={'Quote_ID': 'Quotes'}))
Won Quotes
Quote_Date
2018-11-15 3.0 5
2018-11-16 1.0 3
答案 1 :(得分:1)
或者:
Quotes.groupby('Quote_Date').agg({'Quote_ID':'count','Status':lambda x: x.eq('won').sum()}).\
rename(columns={'Quote_ID':'Quotes','Status':'Won'})
Quotes Won
Quote_Date
2018-11-15 5 3
2018-11-16 3 1