如何在Python中合并具有公共ID列的行以生成单行

问题描述 投票:0回答:1

我的项目已完成 95%,但我遇到了重复问题,我不知道有什么重复。我希望它们合并成一排。

**Excel 中的最终输出如下所示:**

P ID T ID C ID Q1 Q2 Q3
318 495 00036282
318 495 00036282 是的 涵盖所有费用
319 496 00036283 是的 无需额外费用
319 496 00036283 是的

此输出当前有 3130 行

**我希望它在 Excel 中的样子:**

P ID T ID C ID Q1 Q2 Q3
318 495 00036282 是的 涵盖所有费用
319 496 00036283 是的 是的 无需额外费用

我的理想输出大约有 900 行,我希望最终输出中包含所有列

到目前为止我已经尝试过:

  1. 使用“drop_duplicates()”函数删除重复项。
  2. 按属性 ID 分组并聚合行。
  3. 连接具有相似属性 ID 的行,同时保留唯一值
  4. 手动检查数据集是否存在任何不一致或模式(虽然我可以找到它们,但这并不能充分解决问题,因为它需要 Excel 版本作为验证,这对于自动化来说会适得其反)
# Group by P Id and aggregate using sum for numeric columns
df_FinalOutput_summed = df_FinalOutput.groupby('P Id').sum().reset_index()
df_FinalOutput_summed

df_FinalOutput = df_FinalOutput.groupby('P Id').agg({
       'T Id': 'last',
       'C ID': 'last',
         'Q1': 'last' 
         'Q2': 'last'
         'Q3': 'last'
}).reset_index()

# Reset index after grouping
df_FinalOutput.reset_index(drop=True, inplace=True)

# Display the final output DataFrame
df_FinalOutput

此代码块接近我需要的内容,但我不想只选择最后一行,我想合并行,这样我就得到一列,其中包含所有详细信息。

python merge duplicates aggregate
1个回答
0
投票

根据给定的测试数据,

bfill
+
head
ffill
+
tail
似乎可以完成这项工作。

df = pd.DataFrame(
    {
        "P ID": [318, 318, 319, 319],
        "T ID": [495, 495, 496, 496],
        "C ID": ["00036282", "00036282", "00036283", "00036283"],
        "Q1": ["NO", None, "Yes", None],
        "Q2": [None, "Yes", None, "Yes"],
        "Q3": [None, "All cost covered", "No additional costs", None],
    }
)

df.groupby("P ID").apply(lambda x: x.bfill().head(1)).reset_index(drop=True)
© www.soinside.com 2019 - 2024. All rights reserved.