尝试将字符串拆分为键:值对并求和值

2024-09-27 21:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个物品清单和出售物品的编号,以冒号:分隔。该项可以在列表中存在多次。最终目标是创建一个dataframe,其中一列列出项目,另一列列出销售总数。我正在考虑将列表拆分成一个字典,从售出的商品和编号中创建键:值对。然后将此字典转换为数据帧。当项目出现不止一次时,我对求和值感到很不安。下面是数据、我尝试的内容和结果

orders = ["screws:20", "nails:15", "brushes:5", "screws:15", "nails:20"]
my_dict = dict(s.split(":") for s in orders)
print(my_dict)
# {'screws': '15', 'nails': '20', 'brushes': '5'}

我想要的结果是{'screws' : '35', 'nails': '35', 'brushes': '5'},然后将其转换为df


Tags: 数据项目dataframe列表字典my物品dict
3条回答

您可以像这样使用字典:

d = {}

for s in orders:
    key, value = s.split(":")
    d[key] = d.get(key, 0) + int(value)

print (d)

你可以用听写器来做这件事,但你必须处理丢失的钥匙。而是使用^{},它会自动将缺少的值视为0

from collections import Counter

tally = Counter()
for s in orders:
    item, count = s.split(":")
    tally[item] += int(count)
print(tally)  # -> Counter({'screws': 35, 'nails': 35, 'brushes': 5})

您也可以使用defaultdict(int),但是Counter是更好的作业工具

尝试将数据组合成list而不是dict。使用dict将删除具有重复名称的行

此外,在对计数求和之前,必须将计数转换为整数

下面是一个例子:

import pandas as pd

orders = ["screws:20", "nails:15", "brushes:5", "screws:15", "nails:20"]

items_0 = [s.split(':') for s in orders]
items = [[item[0], int(item[1])] for item in items_0]  # convert counts to integer

# create the data frame
df = pd.DataFrame(items, columns=['Item', 'Count'])

# show the data frame
print(df)
# print again, summing the counts for each item
print(df.groupby('Item').sum())

哪张照片

      Item  Count
0   screws     20
1    nails     15
2  brushes      5
3   screws     15
4    nails     20
         Count
Item          
brushes      5
nails       35
screws      35

相关问题 更多 >

    热门问题