根据熊猫数据框中的选定列条件查找重复的行

时间:2021-06-26 06:01:10

标签: python-3.x pandas dataframe

我有一个广泛的基础转换成一个数据框,很难手动识别以下内容

数据框包含名称为 from_busto_bus 的列,无论顺序如何,它们都是唯一标识符,例如对于元素 0

L_ABAN_MACA_0_1 关联有序对(109,140)(140,109)相同。

<头>
姓名 from_bus to_bus x_ohm_per_km
0 L_ABAN_MACA_0_1 109 140 0.444450
1 L_AGOY_BAÑO_1_1 69 66 0.476683
2 L_AGOY_BAÑO_1_2 69 66 0.476683
3 L_ALAN_INGA_1_1 189 188 0.452790
4 L_ALAN_INGA_1_2 188 189 0.500450

所以我想识别重复的有序对并将它们替换为单个,其列值 x_ohn_per_km 定义为重复值的总和,如下所示:

<头>
姓名 from_bus to_bus x_ohm_per_km
0 L_ABAN_MACA_0_1 109 140 0.444450
1 L_AGOY_BAÑO_1_1 69 66 0.953366
3 L_ALAN_INGA_1_1 189 188 0.953240

1 个答案:

答案 0 :(得分:3)

让我们在 groupbyfrom_bus 上对这些列中的值进行排序后尝试 to_bus 沿着 axis=1 然后 agg 聚合结果,可选 {{ 1}} 以符合列的顺序:

reindex

替代方法:

c = ['from_bus', 'to_bus']
df[c] = np.sort(df[c], axis=1)

df.groupby(c, sort=False, as_index=False)\
  .agg({'name': 'first', 'x_ohm_per_km': 'sum'})\
  .reindex(df.columns, axis=1)

d = {**dict.fromkeys(df, 'first'), 'x_ohm_per_km': 'sum'}
df.groupby([*np.sort(df[c], axis=1).T], sort=False, as_index=False).agg(d)