我有一个广泛的基础转换成一个数据框,很难手动识别以下内容
数据框包含名称为 from_bus
和 to_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 |
答案 0 :(得分:3)
让我们在 groupby
和 from_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)