python - 数据框的所有组合,按 ID 分组并按升序元素排序
问题描述
我是 Python 新手,并尝试根据列的所有可能结果创建输出,同时始终从该 ID 上的第一个结果开始。这是一个类似于我正在使用的数据的示例数据框:
ID A B C
1 a 1 10
1 b 3 40
1 c 2 20
2 a 3 90
2 b 1 10
2 c 4 60
2 d 8 100
我想按 ID 分组,以创建一个输出,其中 a 列是基于 A 的所有可能结果,而 B 和 C 是这些组合的总和。
ID Combo B C
1 a 1 10
1 a,b 4 50
1 a,b,c 6 70
2 a 3 90
2 a,b 4 100
2 a,b,c 8 160
2 a,b,c,d 16 260
我已经尝试在 ID 上使用 groupby 以及排列/组合/产品,但是结果总是看起来像这样......(我还没有开始求和部分)
ID Combo B C
1 a,b,c x x
1 a,c,b x x
1 b,a,c x x
1 c,a,b x x
1 b,c,a x x
1 c,b,a x x
etc.
任何人都可以在这里指出我正确的方向吗?我认为组合是正确的方法。似乎我发现的每个问题总是想要上面的格式,而不是针对我正在寻找的输出,所以我找不到我需要的答案。
解决方案
GroupBy
与字符串和数字列的累积和一起使用:
df['A'] = (
df.groupby('ID')
.apply(lambda x: x['A'].add(',').cumsum().str.strip(','))
.reset_index(0, drop=True)
)
df[['B', 'C']] = df.groupby('ID').cumsum()
df = df.rename(columns={'A': 'Combo'})
ID Combo B C
0 1 a 1 10
1 1 a,b 4 50
2 1 a,b,c 6 70
3 2 a 3 90
4 2 a,b 4 100
5 2 a,b,c 8 160
6 2 a,b,c,d 16 260
推荐阅读
- jmeter - 从 Jmeter 中的正则表达式提取器中获取特定值
- c# - 在 .NET 5 中设置证书私钥权限
- powerbi - 是否可以通过 API 为 powerbi 服务中的用户提供访问权限?
- android - 无法点击隐形视图Android
- linux - 从 crontab 运行 pvs 命令
- reporting-services - SSRS/RDL 报告中的列表如何工作?
- node.js - 如何通过 postgresql 中的“typeorm”部分更新 jsonb 字段?
- iframe - 如何将 iframe 获取到 url 和 gif
- deep-learning - 损失函数的权重参数
- c++ - VS2017 对函数地址的赋值运算符返回错误 C2276