我正在处理pandas,并且有一个包含TradeID、Seller ID和付款日期的销售信息数据框,并且我想为每个Seller ID计算在当前交易日期之前,卖方所拥有的先前成功交易的数量。我很确定这是一个拆分应用组合样式的解决方案,但我不知道如何实现它。
数据看起来有点像这样
|---------|-----------|-------------|------------|
|Trade ID | Seller ID | Payment Date|Success? |
|---------|-----------|-------------|------------|
|001 |001 |08/12/2016 |Yes |
|002 |001 |07/12/2016 |Yes |
|003 |001 |12/12/2016 |No |
|004 |001 |13/12/2016 |Yes |
|005 |001 |14/12/2016 |Null |
|005 |002 |18/01/2012 |Yes |
|006 |002 |01/01/2011 |Null |
|007 |003 |07/02/2010 |Yes |
,我正在寻找一个类似于:
的输出:|---------|-----------|-------------|------------|--------------------------|
|Trade ID | Seller ID | Payment Date|Success? |Previous Succesful Trades |
|---------|-----------|-------------|------------|--------------------------|
|001 |001 |08/12/2016 |Yes |1 |
|002 |001 |07/12/2016 |Yes |0 |
|003 |001 |12/12/2016 |No |2 |
|004 |001 |13/12/2016 |Yes |2 |
|005 |001 |14/12/2016 |Null |3 |
|005 |002 |18/01/2012 |Yes |1 |
|006 |002 |01/01/2011 |Null |0 |
|007 |003 |07/02/2010 |Yes |0 |
我可以汇总每个卖家的成功交易,但这并没有考虑到这样一个事实:在卖家进行交易时,他们还没有完成数据框架中的所有交易。例如,在2016年12月12日,卖方1将不会在2016年12月13日完成交易,因此他们之前成功完成的交易是2而不是3。
任何帮助都非常感谢!
您可以应用过滤器,然后使用groupby
和count
df[df['Success'] == 'Yes'].groupby(['Seller ID'])['Success'].count()
Seller ID
001 1
002 1
df.loc[( df['Success?'] == 'Yes' ) , 'Succ'] = 1
df['sumofprevios'] = ( df.groupby('Seller ID')['Succ'].apply(lambda x: x.shift().expanding().sum()))
# you can drop Succ column now.
如果这不是你需要的,请告诉我。
我能想到的最简单的方法是首先将"是"one_answers"否"替换为"真"one_answers"假",然后按Seller ID
分组并对Success?
求和。
df['Success?'] = df['Success?'].replace({'Yes':True, 'No': False})
df.groupby('Seller ID')['Success?'].sum()
pandas文档对于确定这些解决方案非常有帮助!下面是记录不成功交易的一种可能性。
df = pd.DataFrame(
{"Trade ID":[1,2,3,4,5,6],
"Seller ID":[1,1,2,2,2,2],
"Payment Date":["2016-12=08","2016-12-12","2012-01-18","2016-02=08","2016-12-16","2012-01-31"],
"Success?":["Yes","No", "Yes", "Yes","No", "Yes"]})
然后在卖方ID上分组
grouped_seller = df.groupby("Seller ID")
然后你可以做多个不同的事情,但是值计数将计算每个卖家ID是YES或No的次数
grouped_seller["Success?"].value_counts()
Seller ID Success?
1 No 1
Yes 1
2 Yes 3
No 1
Name: Success?, dtype: int64
你可以使用。loc[]访问卖家id
grouped_seller["Success?"].value_counts().loc[2]
Success?
Yes 3
No 1
Name: Success?, dtype: int64
注意:我创建的数据框架不会和你的数据框架具有相同的dtypes,除非你将日期转换为datetime