【问题标题】:How to find the difference, mean, sum between all pairs of rows in pandas dataframe?如何找到熊猫数据框中所有行对之间的差异、均值和总和?
【发布时间】:2016-11-08 17:12:12
【问题描述】:

我有以下 pandas DataFrame。

import pandas as pd
df = pd.read_csv('filename.csv')

print(df)

     dog      A         B           C
0     dog1    0.787575  0.159330    0.053095
1     dog10   0.770698  0.169487    0.059815
2     dog11   0.792689  0.152043    0.055268
3     dog12   0.785066  0.160361    0.054573
4     dog13   0.795455  0.150464    0.054081
5     dog14   0.794873  0.150700    0.054426
..    ....
8     dog19   0.811585  0.140207    0.048208
9     dog2    0.797202  0.152033    0.050765
10    dog20   0.801607  0.145137    0.053256
11    dog21   0.792689  0.152043    0.055268
    ....

我想找出所有行之间A 的绝对差异。如何做到这一点(记住数据增长非常快)?

“配对”数据的一种方法是尝试:

df1 = df.set_index("dog")

from itertools import combinations
cc = list(combinations(df,2))

out = pd.DataFrame([df1.loc[c,:].sum() for c in cc], index=cc)

但是,这只是求和。如何进行多项操作?

【问题讨论】:

    标签: python numpy pandas dataframe


    【解决方案1】:

    考虑以下数据框:

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame({'Dog': list('ABCDEFG'), 'A': range(7)})[['Dog', 'A']]
    df
    

    使用numpy的subtract.outer函数然后取绝对值。

    df1 = pd.DataFrame(np.abs(np.subtract.outer(df.A, df.A)), df.Dog, df.Dog)
    df1
    

    获取组合元组列表:

    stacked = df1.stack()
    pd.DataFrame({'Dogs': stacked.index.to_series(), 'Diff': stacked})[['Dogs', 'Diff']].reset_index(drop=True)
    

    【讨论】:

    • 谢谢。您如何将其置于“配对格式”中,即 (dog A, dog A) = 0, (dog A, dog B) = 1 等?
    • @ShanZhengYang 如果您觉得这个答案令人满意,请接受。这会将问题标记为已回答,并鼓励人们回答您未来的问题。
    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 2021-11-09
    • 2020-12-02
    • 2015-04-06
    • 2018-04-18
    • 1970-01-01
    • 2021-06-03
    • 2020-02-29
    相关资源
    最近更新 更多