【问题标题】:How to find an average of a list to be with unique identifiers如何找到具有唯一标识符的列表的平均值
【发布时间】:2019-11-08 02:24:07
【问题描述】:

所以基本上我有一个整数列表,我想得到平均值。问题是我有第二个长度相等的字符串列表。它在下表中配置。现在我基本上需要的是添加与正确字母相关的整数的总和并返回这些字母的平均值。这是在 Python 3 上完成的,过去几天我一直被困在这个问题上。有人能指出我正确的方向吗?

before

| 2   | a |
+-----+---+
| 241 | b |
+-----+---+
| 21  | a |
+-----+---+
| 512 | b |
+-----+---+
| 142 | a |
+-----+---+
after
+-----+---+
| 165 | a |
+-----+---+
| 753 | b |
+-----+---+

【问题讨论】:

  • 2、21、142的平均值是165?
  • 我有香肠手指
  • 字母是否超过2个?
  • 是的,大约有 15 个唯一键,每个键都有 int 值,并且许多键是重复的。

标签: python list average


【解决方案1】:

您可以尝试使用 pandas:

import pandas as pd

list_1 = [2, 241, 21, 512, 142]
list_2 = ['a', 'b', 'a', 'b', 'a']

c = pd.DataFrame()
c['list_1'] = list_1
c['list_2'] = list_2

uniques = c.list_2.unique()
for i in uniques:
    print('sum ' + i + ': ' + str(c[c.list_2==i].list_1.sum()))
    print('mean ' + i + ': ' + str(c[c.list_2==i].list_1.mean()))

【讨论】:

  • 我宁愿不使用 pandas,因为我对 python 还是很陌生。我很感激你的努力
【解决方案2】:

让我们假设 list1 = [2, 241, 21, 512, 142]list2 = ['a', 'b', 'a', 'b', 'a'] 如您所述。我不知道你有什么确切的限制,但让我在初始设置之外使用两个字典。

  1. 获取list2中的唯一键并统计键的数量。

让我们定义一个空字典cnt_dic 来计算键的数量。完成键计数后,创建字典 res_dic 的副本,其中包含零值。

cnt_dic = {}

for key in list2:
    if key not in cnt_dic: 
        cnt_dic[key] = 1
    else:
        cnt_dic[key] += 1

res_dic = cnt_dic.copy()
for key in res_dic.keys():
    res_dic[key] = 0
  1. 使用收集的键对整数求和。
for num, key in zip(list1, list2):
    res_dic[key] += num
  1. 计算平均值。
for key in cnt_dic.keys():
    res_dic[key] /= cnt_dic[key]

那么res_dic 将包含{'a': 55.0, 'b': 376.5}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 2019-06-15
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2017-08-27
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多