我有一个包含 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
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]}