首页 > 解决方案 > Pandas:计算两列中的值而不考虑顺序

问题描述

我有一个表单的 Pandas DataFrame

df = pd.DataFrame({'1':['a','b','c'], '2':['b','a','d'], '3':['0.7','0.6','0.1']}).

我想在此 DataFrame 中添加一列,其中包含特定行出现的次数,而不考虑顺序(因为前两列是无向图的节点)。此外,我想合并那些仅在前两列的顺序上有所不同的行,并取第三列中数字的平均值。在这种情况下,应该是

df = pd.DataFrame({'1':['a','c'], '2':['b','d'], '3':['0.65','0.1'], '4':['2','1']}).

还要考虑 DataFrame 包含超过 100.000 行。

标签: pythonpandasdataframe

解决方案


采用 -

a=df[['1','2']].values
a.sort(axis=1)
df[['1','2']] = a
df.groupby(['1','2'])['3'].agg(['count','mean']).reset_index()

输出

    1   2   count   mean
0   a   b   2   0.65
1   c   d   1   0.10

或者

df[['1','2']] = df[['1','2']].sort_values(1,axis=1)
df.groupby(['1','2'])['3'].agg(['count','mean']).reset_index()

推荐阅读