子列表的计数值
Count values of sublists
假设我在 Python 中有一个列表列表,其中每个元素代表一天以及商店中有多少产品:
l = [
[a, a, a, b, c],
[a, a, b, b, c],
[a, b, b, c, c]
]
我想创建一个摘要来显示:
Day 1: a:3, b:1, c:1
Day 2: a:2, b:2, c:1
Day 3: a:1, b:2, c:2
我需要一种格式,然后我可以绘制随时间变化的产品可用性图表。
我试过这个:
from collections import Counter
Counter(x for sublist in l for x in sublist)
但这会计算所有列表中的元素,而不是返回每个子列表的结果。
谢谢大家,这是包括图表在内的最终解决方案:
from collections import Counter
d = {i:Counter(sublist) for i, sublist in enumerate(l, start=1)}
df = pd.DataFrame.from_dict(d, orient='index').reset_index()
df = df.melt('index', var_name='product', value_name='vals')
df['product'] = df['product'].map({'A': 'a', 'B': 'b','C': 'c','D': 'd'})
sns.lineplot(x="index", y="vals", hue='product', data=df)
尝试 dict comprehension
:
>>> {f'Day {i}': Counter(sublist) for i, sublist in enumerate(l, start=1)}
{'Day 1': Counter({'a': 3, 'b': 1, 'c': 1}),
'Day 2': Counter({'a': 2, 'b': 2, 'c': 1}),
'Day 3': Counter({'a': 1, 'b': 2, 'c': 2})}
更简单丑陋的版本你可以根据需要改变
>>> for i in l:
... x=Counter(i)
... print(x['a'],'a')
... print(x['b'],'b')
... print(x['c'],'c')
您可以通过枚举列表来检索索引
假设我在 Python 中有一个列表列表,其中每个元素代表一天以及商店中有多少产品:
l = [
[a, a, a, b, c],
[a, a, b, b, c],
[a, b, b, c, c]
]
我想创建一个摘要来显示:
Day 1: a:3, b:1, c:1
Day 2: a:2, b:2, c:1
Day 3: a:1, b:2, c:2
我需要一种格式,然后我可以绘制随时间变化的产品可用性图表。
我试过这个:
from collections import Counter
Counter(x for sublist in l for x in sublist)
但这会计算所有列表中的元素,而不是返回每个子列表的结果。
谢谢大家,这是包括图表在内的最终解决方案:
from collections import Counter
d = {i:Counter(sublist) for i, sublist in enumerate(l, start=1)}
df = pd.DataFrame.from_dict(d, orient='index').reset_index()
df = df.melt('index', var_name='product', value_name='vals')
df['product'] = df['product'].map({'A': 'a', 'B': 'b','C': 'c','D': 'd'})
sns.lineplot(x="index", y="vals", hue='product', data=df)
尝试 dict comprehension
:
>>> {f'Day {i}': Counter(sublist) for i, sublist in enumerate(l, start=1)}
{'Day 1': Counter({'a': 3, 'b': 1, 'c': 1}),
'Day 2': Counter({'a': 2, 'b': 2, 'c': 1}),
'Day 3': Counter({'a': 1, 'b': 2, 'c': 2})}
更简单丑陋的版本你可以根据需要改变
>>> for i in l:
... x=Counter(i)
... print(x['a'],'a')
... print(x['b'],'b')
... print(x['c'],'c')
您可以通过枚举列表来检索索引