迭代多个数据帧并根据平均值对它们进行分组

问题描述 投票:0回答:1

我有一个包含 81 个不同数据帧的数据帧列表。 我想计算每个数据帧中同一列的平均值。根据平均值,我想对数据帧进行比较和分组。值彼此接近的平均值形成一个新的合并数据框。

示例:

df1 = pd.DataFrame({'ID':['1','2','3','4','5'], 'Töltőtömeg':['70','69','71','70','70.5']})
df2 = pd.DataFrame({'ID':['1','2','3','4','5'], 'Töltőtömeg':['72','69','70','70','71.5']})
df3 = pd.DataFrame({'ID':['1','2','3','4','5'], 'Töltőtömeg':['148','149','150','151','151']})
df4 = pd.DataFrame({'ID':['1','2','3','4','5'], 'Töltőtömeg':['150','150','151','149','148']})

预期输出:

df12

0   1   70
1   2   69
2   3   71
3   4   70
4   5   70.5
5   1   72
6   2   69
7   3   70
8   4   70
9   5   71.5

df34

0   1   148
1   2   149
2   3   150
3   4   151
4   5   151
5   1   150
6   2   150
7   3   151
8   4   149
9   5   148
python dataframe loops group-by mean
1个回答
0
投票

IIUC,您希望根据列的平均值按数据帧的接近程度对数据帧进行分组,然后将它们连接起来。

为此,您可以计算所有平均值,对它们进行排序并使用阈值识别组(高于该阈值,您将它们视为不同的组)。最后每组

concat

dfs = [df2, df1, df3, df3]
avg = np.array([pd.to_numeric(d['Töltőtömeg']).mean() for d in dfs])
# [70.1, 70.5, 149.8, 149.8]

groups = pd.Series(avg).sort_values().diff().gt(10).cumsum()

out = [pd.concat([dfs[i] for i in v], ignore_index=True)
       for v in groups.index.groupby(groups).values()]

输出:

[  ID Töltőtömeg
 0  1         70
 1  2         69
 2  3         71
 3  4         70
 4  5       70.5
 5  1         72
 6  2         69
 7  3         70
 8  4         70
 9  5       71.5,
   ID Töltőtömeg
 0  1        148
 1  2        149
 2  3        150
 3  4        151
 4  5        151
 5  1        148
 6  2        149
 7  3        150
 8  4        151
 9  5        151]

中级:

groups.index.groupby(groups)
# {0: [1, 0], 1: [2, 3]}
© www.soinside.com 2019 - 2024. All rights reserved.