繁体   English   中英

Python Pandas Dataframe:将一行中的数据复制到具有相同值的多行并合并行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM