我的项目已完成 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 行,我希望最终输出中包含所有列
到目前为止我已经尝试过:
# 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
此代码块接近我需要的内容,但我不想只选择最后一行,我想合并行,这样我就得到一列,其中包含所有详细信息。
根据给定的测试数据,
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)