如何合并第一个元组元素的重复项并计算第二个元组元素的平均值

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

给定这个元组: [('红色', 7), ('红色', 2), ('红色', 4), ('绿色', 3), ('红色', 11), ('绿色', 6), ( '蓝色', 8)]

我想获得这样的东西:

[('红', 6), ('绿', 4.5), ('蓝', 8)]

谢谢!!

python tuples
2个回答
0
投票

您可以将其转换为 DF 并进行计算。如果那是您想要的格式,可以在之后将其转回元组。

import pandas as pd

data = [('Red', 7), ('Red', 2), ('Red', 4), ('Green', 3), ('Red', 11), ('Green', 6), ('Blue', 8)]
df = pd.DataFrame(data, columns=['Color', 'Number'])
df = df.groupby(['Color'], as_index=False).mean()
print(df)
df = [tuple(x) for x in df.to_numpy()]
print(df)
   Color  Number
0   Blue     8.0
1  Green     4.5
2    Red     6.0
[('Blue', 8.0), ('Green', 4.5), ('Red', 6.0)]

0
投票

我想你也可以通过使用 more-itertools 来做到这一点。
这是例子

import more_itertools
import statistics

a = [('Red', 7), ('Red', 2), ('Red', 4), ('Green', 3), ('Red', 11), ('Green', 6), ('Blue', 8)]

group = more_itertools.groupby_transform(
    sorted(a, key=lambda item: item[0]),
    lambda item: item[0],
    lambda item: item[1],
    lambda g: statistics.mean(list(g))
)
print(list(group))
[('Blue', 8), ('Green', 4.5), ('Red', 6)]

您可以在这里阅读有关此功能的信息

© www.soinside.com 2019 - 2024. All rights reserved.