[英]Python Pandas Dataframe: Duplicating data in one row to multiple rows with the same value and merging rows
我一直在尝试创建一个脚本来清理一些数据,但我遇到了麻烦并且无法找到信息。 我也可能在寻找错误的东西。
我有一个 CSV 的数据包含大量的列和行。 我正在尝试将行合并在一起。 每个“Repeat_Instance”应该只有 1 行,并且空的“Repeat_Instance”行需要在另一行中。 我主要是通过使用 pandas groupby
命令使其工作,除了需要将 ID 的第一行复制到具有相同 ID 的每个后续行。
这是数据框/表的简短示例:
记录_ID | 重复名称 | 重复实例 | DataInFirstRepeatName | Data_In_check_current | Data_In_Assessment |
---|---|---|---|---|---|
1 | 一个 | ||||
1 | check_current | 1 | 乙 | ||
1 | check_current | 2 | C | ||
1 | 评估 | 1 | D | ||
2 | Z | ||||
2 | check_current | 1 | 是 | ||
2 | 评估 | 1 | X | ||
2 | 评估 | 2 | 五 |
最后,它应该如下所示:
记录_ID | 重复名称 | 重复实例 | DataInFirstRepeatName | Data_In_check_current | Data_In_Assessment |
---|---|---|---|---|---|
1 | check_current | 1 | 一个 | 乙 | D |
1 | check_current | 2 | 一个 | C | |
2 | check_current | 1 | Z | 是 | X |
2 | 评估 | 2 | Z | 五 |
对于实际代码,我有这个:
import pandas as pd
import numpy as np
df = pd.read_csv('Test.csv')
df_joined = df.groupby(['Record_ID', 'Repeat_Instance'], sort=False).max().reset_index()
df_joined.to_csv('complete.csv', index=False)
我没有成功将 Record_ID 的第一行复制到每一行。 我认为使用 pandas concat
可能是解决方案,但我没有运气。 https://pandas.pydata.org/docs/reference/api/pandas.concat.html
任何帮助或指示将不胜感激。
您可以使用前向填充 function ffill
将第一行中的DataInFirstRepeatName
信息传播给其他人。 完成此操作后,只需删除每组中的第一行(可以使用例如dropna
在合适的列上完成)。
df['DataInFirstRepeatName'] = df.groupby('Record_ID')['DataInFirstRepeatName'].ffill()
df = df.dropna(subset=['Repeat_Name'])
然后应用其他行合并逻辑(这里是first
):
df.groupby(['Record_ID', 'Repeat_Instance']).first().reset_index()
结果:
Record_ID Repeat_Instance Repeat_Name DataInFirstRepeatName Data_In_check_current Data_In_Assessment
0 1 1.0 check_current A B D
1 1 2.0 check_current A C None
2 2 1.0 check_current Z Y X
3 2 2.0 assessment Z None V
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.