python - 删除重复项但保留对删除行的引用

标签 python pandas

我有一个包含许多重复行的数据框。该数据集有数百行和列。

每一行都有一个唯一的标识符。我想创建一个仅包含唯一行的数据框。然后我想创建一个映射,将唯一行数据帧中的标识符映射到原始数据帧的标识符。

例如

import pandas as pd

# Dummy data
df = pd.DataFrame({'col_1': [1, 2, 2, 1, 2, 3],
                   'col_2': [2, 4, 4, 2, 4, 2],
                   'col_3': [3, 2, 2, 3, 2, 7]},
                  index=['A', 'B', 'C', 'D', 'E', 'F'])

df
Out[11]: 
   col_1  col_2  col_3
A      1      2      3
B      2      4      2
C      2      4      2
D      1      2      3
E      2      4      2
F      3      2      7

# Unique row dataframe
df_unique = df.drop_duplicates()
df_unique()
Out[12]: 
   col_1  col_2  col_3
A      1      2      3
B      2      4      2
F      3      2      7

# Mapping from df_unique to df
# Creating this mapping is the problem
mapping = {'A': ('A', 'D'),
           'B': ('B', 'C', 'E'),
           'F': ('F')}

在本例中,行“A”和“D”相等,并且“A”在 drop_duplicates() 之前映射到“A”和“D”。

如何创建映射

这里我使用 drop_duplicates() 创建唯一行数据帧。这不是一个要求。如果有人有更好的想法,映射不一定是字典。

最佳答案

使用GroupBy.agg使用 DataFrame 的所有列的 firsttuple ,然后创建元组字典:

mapping = (df.reset_index()
             .groupby(df.columns.tolist())['index']
             .agg(['first',tuple])
             .set_index('first')['tuple']
             .to_dict())
print (mapping)
{'A': ('A', 'D'), 'B': ('B', 'C', 'E'), 'F': ('F',)}

关于python - 删除重复项但保留对删除行的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820726/

相关文章:

python - 阅读 Word 文档并获取每个标题的文本

python - 如何用 pandas 计算百分比和累积百分比

python - pandas 数据透视函数中索引的重复条目

python - 属性错误: 'module' object has no attribute 'register_success'

Python模块在多个产品之间共享

python - 如何对tf.nn.embedding_lookup进行逆向操作?

python - 如何使用python将多个文件从子目录传输到单个路径文件夹?

python - 在 Python Pandas 数据框中拆分列

python - 如何将 JSON 转换为数据帧

python - SQLAlchemy 和 sqlite 的嵌套事务