计算来自多个数据框列的唯一值

时间:2019-03-11 16:21:27

标签: python-3.x pandas dataframe

我有一个销售报价的数据框,其中包含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()

但是我不确定如何计算给定日期的“获胜”次数。

2 个答案:

答案 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