python - 如何创建反映每个客户过去 5 次交易的 5 个新列?
问题描述
基本上任务是每个客户最后 5 笔交易应该出现,但它应该仅基于该客户。
df = pd.DataFrame({
"customer_id": [121,121,121,121,121,121,121,233,233,233,233,233,233,233,233],
"Amount": [500,300,400,239,568,243,764,890,456,420,438,234,476,568,243,]
})
因此,我正在尝试根据“金额”列的移动创建 5 个新列。
对于这个下面的代码运行良好
for obs in range(1,6):
df['S_'+ str(obs)] = df.Amount.shift(obs)
输出:
customer_id Amount S_1 S_2 S_3 S_4 S_5
0 121 500 NaN NaN NaN NaN NaN
1 121 300 500.0 NaN NaN NaN NaN
2 121 400 300.0 500.0 NaN NaN NaN
3 121 239 400.0 300.0 500.0 NaN NaN
4 121 568 239.0 400.0 300.0 500.0 NaN
5 121 243 568.0 239.0 400.0 300.0 500.0
6 121 764 243.0 568.0 239.0 400.0 300.0
7 233 890 764.0 243.0 568.0 239.0 400.0
8 233 456 890.0 764.0 243.0 568.0 239.0
9 233 420 456.0 890.0 764.0 243.0 568.0
10 233 438 420.0 456.0 890.0 764.0 243.0
11 233 234 438.0 420.0 456.0 890.0 764.0
12 233 476 234.0 438.0 420.0 456.0 890.0
13 233 568 476.0 234.0 438.0 420.0 456.0
14 233 243 568.0 476.0 234.0 438.0 420.0
问题
通过这种方法,索引号 7 中的下一个客户也显示以前的客户交易是错误的。应该是 NaN
我想我需要根据 customer_id 进行分组,然后为每个客户转移金额
而我无法做到这一点。
解决方案
移位时可以使用 groupby:
for obs in range(1,6):
df['S_'+ str(obs)] = df.groupby(["customer_id"]).Amount.shift(obs)
这导致
customer_id Amount S_1 S_2 S_3 S_4 S_5
0 121 500 NaN NaN NaN NaN NaN
1 121 300 500.0 NaN NaN NaN NaN
2 121 400 300.0 500.0 NaN NaN NaN
3 121 239 400.0 300.0 500.0 NaN NaN
4 121 568 239.0 400.0 300.0 500.0 NaN
5 121 243 568.0 239.0 400.0 300.0 500.0
6 121 764 243.0 568.0 239.0 400.0 300.0
7 233 890 NaN NaN NaN NaN NaN
8 233 456 890.0 NaN NaN NaN NaN
9 233 420 456.0 890.0 NaN NaN NaN
10 233 438 420.0 456.0 890.0 NaN NaN
11 233 234 438.0 420.0 456.0 890.0 NaN
12 233 476 234.0 438.0 420.0 456.0 890.0
13 233 568 476.0 234.0 438.0 420.0 456.0
14 233 243 568.0 476.0 234.0 438.0 420.0
推荐阅读
- c# - 实体框架中的复合唯一更新冲突
- bash - 检查今天是否是星期天的程序
- google-api-dotnet-client - .Net Client Google.Cloud.Storage.V1.StorageClient UploadObjectAsync 503 周期性报错,频率低
- c++ - Typedef 变量的模板类编译问题
- c++ - C ++ Lambda - 错误:没有匹配的调用函数
- css - 固定元素上的径向框阴影
- mysql - Map的ElementCollection
未使用 Map 键创建的集合表作为表键的一部分 - angular6 - 如何在 Angula 6 中导入/包含/加载自定义 JS 文件
- angular - 带有图像文件的表单数据未发布到 url angular
- jquery - Jquery 提交输入已更改的表中的字段