给定这个元组: [('红色', 7), ('红色', 2), ('红色', 4), ('绿色', 3), ('红色', 11), ('绿色', 6), ( '蓝色', 8)]
我想获得这样的东西:
[('红', 6), ('绿', 4.5), ('蓝', 8)]
谢谢!!
您可以将其转换为 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)]
我想你也可以通过使用 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)]
您可以在这里阅读有关此功能的信息