![](/img/trans.png)
[英]Expanding pandas Data Frame rows based on number and group ID (Python 3).
[英]Expanding rows of previous billing data into columns. Python Pandas
我正在尝试从前几个月的计费费用中构建功能,因此我当前的数据看起来像这样,而我要创建的列是“PreviousFee”。 我还希望能够将其扩展到两个月前、三个月前等。
谢谢!
data = {'CustomerName': ['Alligators','Alligators', 'Alligators', 'Alligators','Bricks', 'Bricks', 'Bricks', 'Bricks', 'Bricks', 'Bricks'],
'ServiceID': [1001, 1002, 1001, 1002, 2001, 2002, 2003, 2001, 2002, 2003],
'Product': ['Apples', 'Bananas', 'Apples', 'Bananas', 'Oranges', 'Apples', 'Bananas', 'Oranges', 'Apples', 'Bananas'],
'Month': ['Jan', 'Jan', 'Feb', 'Feb', 'Jan', 'Jan', 'Jan', 'Feb', 'Feb', 'Feb'],
'Year': [2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021],
'Fee': [12, 17, 10, 34, 12, 56, 67, 23, 56, 34],
'PreviousFee': ['na', 'na', 12, 37, 'na', 'na', 'na', 12, 56, 67]}
df = pd.DataFrame(data)
df
只需使用groupby()
和shift
就可以了
df['PrevFeeGrp'] = df.groupby(['CustomerName', 'ServiceID', 'Product'])['Fee'].shift(1)
CustomerName ServiceID Product Month Year Fee PreviousFee PrevFeeGrp
0 Alligators 1001 Apples Jan 2021 12 na NaN
1 Alligators 1002 Bananas Jan 2021 17 na NaN
2 Alligators 1001 Apples Feb 2021 10 12 12.0
3 Alligators 1002 Bananas Feb 2021 34 37 17.0
4 Bricks 2001 Oranges Jan 2021 12 na NaN
5 Bricks 2002 Apples Jan 2021 56 na NaN
6 Bricks 2003 Bananas Jan 2021 67 na NaN
7 Bricks 2001 Oranges Feb 2021 23 12 12.0
8 Bricks 2002 Apples Feb 2021 56 56 56.0
9 Bricks 2003 Bananas Feb 2021 34 67 67.0
如果您想提前 2 个月获得,只需执行.shift(2)
。 记得事先对你的 df 进行排序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.