Python 在数据帧中识别并发事件的简单方法
我正在寻找一种简单的方法,向数据框添加一列,以指示给定部件是否已连续购买至少两年 下面是一个数据帧示例Python 在数据帧中识别并发事件的简单方法,python,pandas,concurrency,Python,Pandas,Concurrency,我正在寻找一种简单的方法,向数据框添加一列,以指示给定部件是否已连续购买至少两年 下面是一个数据帧示例 df = pd.DataFrame( { 'PART_UNIT':['A','A','A','B','B'], 'FiscalYear':['2015/2016','2016/2017','2018/2019','2015/2016','2017/2018'], 'PO_UNIT_PRICE':[10,12,11,45,54] }
df = pd.DataFrame(
{
'PART_UNIT':['A','A','A','B','B'],
'FiscalYear':['2015/2016','2016/2017','2018/2019','2015/2016','2017/2018'],
'PO_UNIT_PRICE':[10,12,11,45,54]
}
)
print(df)
0 A 2015/2016 10
1 A 2016/2017 12
2 A 2018/2019 11
3 B 2015/2016 45
4 B 2017/2018 54
我正在寻找一个函数,就像我在添加标准偏差列时使用的函数一样
df['std'] = df.groupby(['PART_UNIT'])['PO_UNIT_PRICE'].transform(np.std)
得到这样的结果
PART_UNIT FiscalYear PO_UNIT_PRICE Concurrent
0 A 2015/2016 10 1
1 A 2016/2017 12 1
2 A 2018/2019 11 1
3 B 2015/2016 45 0
4 B 2017/2018 54 0
正如您可以看到的,“B”部分在列中得到0,因为它没有连续两年购买
import pandas as pd
df = pd.DataFrame(
{
'PART_UNIT': ['A', 'A', 'A', 'B', 'B'],
'FiscalYear': ['2015/2016', '2016/2017', '2018/2019', '2015/2016', '2017/2018'],
'PO_UNIT_PRICE': [10, 12, 11, 45, 54]
}
)
print(df)
def two_years_in_a_row(fiscal_years):
tmp = list(fiscal_years)
for idx, year in enumerate(tmp):
if idx > 0:
if tmp[idx - 1].split('/')[1] == year.split('/')[0]:
return 1
return 0
print('----------------------------------------')
df['concurrent'] = df.groupby(['PART_UNIT'])['FiscalYear'].transform(two_years_in_a_row)
print(df)
输出
PART_UNIT FiscalYear PO_UNIT_PRICE
0 A 2015/2016 10
1 A 2016/2017 12
2 A 2018/2019 11
3 B 2015/2016 45
4 B 2017/2018 54
----------------------------------------
PART_UNIT FiscalYear PO_UNIT_PRICE concurrent
0 A 2015/2016 10 1
1 A 2016/2017 12 1
2 A 2018/2019 11 1
3 B 2015/2016 45 0
4 B 2017/2018 54 0