【问题标题】:Extracting values from duplicate rows and fitting them to a new dataframe从重复行中提取值并将它们拟合到新的数据框
【发布时间】:2017-05-26 19:28:51
【问题描述】:

我有一个数据框,它在几列(姓名、年龄、性别)上有重复的行。我想识别所有这样的行并从每一行中提取一个唯一的列值(account_no)。这些列值将被拟合到一个新的数据框中(包含源和目标列)。

import pandas as pd

data={'name':['a','b','c','b','d','a','b','a','a'],'age':[28,22,22,22,25,28,22,22,22],'gender':['m','m','m','m','m','m','m','m','m'],'account_no':[101,102,103,104,105,106,107,108,109]}
dataset = pd.DataFrame(data,columns=['name','age','gender','account_no'])

我正在努力实现:

source    target    
101       106       
102       104
104       107
107       102
108       109

我试图找到重复项并使用 groupby 对它们进行分组,但无法找到一种方法将它们放入由列 source 和 target 组成的新数据框中。

import pandas as pd

data={'name':['a','b','c','b','d','a','b','a','a'],'age':[28,22,22,22,25,28,22,22,22],'gender':['m','m','m','m','m','m','m','m','m'],'account_no':[101,102,103,104,105,106,107,108,109]}
dataset = pd.DataFrame(data,columns=['name','age','gender','account_no'])
out = pd.DataFrame(columns=['Source','Target'])
df_res = pd.DataFrame()

duplicates = dataset[dataset.duplicated(subset=['name','age','gender'],keep=False)]
df_res = pd.concat(g for _, g in duplicates.groupby(['name','age','gender']) if len(g) > 1)

我无法从重复行中找到适合 account_no 到单行输出数据框的方法。 请提出一种方法。谢谢。

【问题讨论】:

    标签: python pandas dataframe duplicates


    【解决方案1】:

    考虑以下方法:

    from itertools import combinations, chain
    
    d = df.groupby(['name','age','gender'])['account_no'] \
          .apply(lambda x: list(combinations(x, 2))) \
          .values
    
    new = pd.DataFrame(sorted(chain.from_iterable(d)), columns=['source','target']) \
            .sort_values(['source','target'])
    

    结果:

    In [416]: new
    Out[416]:
       source  target
    0     101     106
    1     102     104
    2     102     107
    3     104     107
    4     108     109
    

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2022-01-12
      相关资源
      最近更新 更多