如何按ID分组的位置顺序将pandas DataFrame与另一DataFrame对应相乘?
解决方案
可以通过以下步骤实现需求:
- 为每个ID分组添加组内序号:使用
groupby('id').cumcount()为每个ID分组内的元素生成从0开始的连续序号,这个序号对应df2中元素的位置索引。 - 提取df2的数值数组:将df2的单列数据转换为一维数组,方便按索引直接取值。
- 对应位置相乘:将df1的
value列与df2中对应序号的元素相乘,得到最终结果。
完整代码示例
import pandas as pd df1 = pd.DataFrame([[1, 1], [2, 1], [3, 1], [2, 1], [2, 2], [3, 2], [5, 3]], columns=['value', 'id']) df2 = pd.DataFrame([1, 2, 3, 4]) # 生成每个ID分组内的元素序号 df1['group_idx'] = df1.groupby('id').cumcount() # 提取df2的数值数组 df2_vals = df2.iloc[:, 0].values # 执行对应位置的乘法运算 result = df1['value'] * df2_vals[df1['group_idx']] # 按需求格式输出结果 print(result.to_string(index=False))
运行结果
1 4 9 8 2 6 5
内容的提问来源于stack exchange,提问作者bachts
相关产品推荐
相关产品推荐

