有效地比较多个熊猫数据帧的总和

时间:2020-10-15 19:37:17

标签: python pandas list if-statement

我有多个带有一些常用名称索引的熊猫数据框(5)。他们有不同的大小。我需要从每个数据帧中至少求和5个不同的公用colum names(总共25个),然后比较这些和。

Data:
df_files = [df1, df2, df3, df4, df5]
df_files
out:
    [         z          name  ...             a         b
0            10           DAD  ...             4        4
1            10           DAD  ...             5        4
2            10           DAD  ...             3        6
3            10           DAD  ...             9        2
4            10           DAD  ...            11        1
...         ...           ...  ...            ...       ...
7495       <NA>           NaN  ...             2        0
7496       <NA>           NaN  ...             5        3
7497       <NA>           NaN  ...             3        1
7498       <NA>           NaN  ...             2        0
7499       <NA>           NaN  ...             4        3

[7500 rows x 35 columns] #The dataframes are like this type but some vary in size.

我需要的是对一些特定的common names求和,然后比较这些和以查看它们是否匹配以及它们是否确实打印出来并确定,以及是否看不到哪个值与其他类似:来自"column name"df3的{​​{1}}的值与其他值不匹配,并且看到期望的公共值(当其他多数匹配时)和匹配的列(或者如果只是匹配则不需要显示,只需显示共同的期望值)。也许其中一些不会彼此匹配,但是会以共同的期望值作为最重复的值,并且如果其中任何一个匹配,则打印出该值需要进行校正,因为它们中的任何一个都匹配并看到值不匹配。

我开始时是这样的:

df4

或者它们可以作为整数列表进行比较。

感谢您对此问题的关注。我希望我已经具体了。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则需要将数据帧和各个列的名称放在一个位置以比较总和。在这种情况下,我通常使用字典来保留变量的名称,如下所示:

df_files = {'df1':df1, 'df2':df2, 'df3':df3, 'df4':df4, 'df5':df5}
summary = pd.DataFrame()
for df in df_files.keys():
    cols = list(summary)
    summary= pd.concat([summary, df_files[df].sum()], axis=1)
    summary.columns = cols + [df]
summary = summary.dropna()

摘要将是一个数据框架,其中公用列名称为索引,数据框架名称为列。如果只有5个具有5个公共列名的dfs,那么观察结果将很容易。这是我运行3 dfs的示例结果:

    df1   df2   df3
a   6.0  10.0   6.0
b  15.0  14.0  15.0

但是,如果数字增加,则可以使用每行的“模式”来查找最频繁的结果,并比较各行(也许将所有值相除并寻找非1的结果)