有没有办法列出一个列表,然后删除列表中的第一项?

2024-09-28 01:24:48 发布

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

我试图对一些销售数据进行排序,但数据是按“账单”收集的,我想查看每个账单中的项目。你知道吗

我曾尝试拆分列以获得项目列表,但它们不会按我所希望的方式运行。我尝试遍历,但我所做的只是删除每行的第一项。你知道吗

frame = {'Items': ["1 Nail, 2 Cups", "3 Nail, 1 Cups", "1 Hammer, 3 Cups"],
        'Date': ['03-2019','03-2019','03-2019']}

df = pd.DataFrame(frame)

df['Items split'] = df['Items'].str.split(",")

df.head()
Items   Date    Items split
0   1 Nail, 2 Cups  03-2019 [1 Nail, 2 Cups]
1   3 Nail, 1 Cups  03-2019 [3 Nail, 1 Cups]
2   1 Hammer, 3 Cups    03-2019 [1 Hammer, 3 Cups]
for item in df['Items split']:
    for i in item:
        print (i)
1 Nail
 2 Cups
3 Nail
 1 Cups
1 Hammer
 3 Cups

我希望能够找到每个帐单项目之间的相关性。 钉子和杯子多久一起用一次?你知道吗

但要做到这一点,我想我需要删除前面的数字,因为每个数字显示1个钉子和3个钉子是不同的。你知道吗

如果能与另一列中的数字相乘也会很有趣。所以我可以对每一项进行计数,得到总数。你知道吗

最后一部分的澄清: 假设我们有两个钉子,三个铁杯,一根稻草在一块地里。通过拆分账单和删除数字,我现在可以找到商品之间的相关性,但我看不出我们实际卖出了多少商品。如果可能的话,我想一个解决办法是把前面的整数拆分出来,再乘以项目名称。然后它看起来像钉子,钉子,铁杯,铁杯,铁杯,稻草。然后我可以数钉子出现的次数等


Tags: 数据项目dffordateitems数字frame
1条回答
网友
1楼 · 发布于 2024-09-28 01:24:48

详细解决方案

for item in df['Items split']:    
    for i in item:
        i = i.lstrip() #remove leading whitespaces
        arr = i.split(' ') #split string at whitespaces  > transforms '1 nail' into ['1','nail'] 
        arr = arr[1:] #remove the first element (the 1 of ['1', 'nail'])
        final_string = ' '.join(arr) #joins the array to a string seperated by whitespaces. So the Program also works for Materials with spaces like "100 Long Nail"
        print(final_string)

与oneliner相同的解决方案:

for item in df['Items split']:    
    for i in item:
        print(' '.join(i.lstrip().split(' ')[1:]))

两个示例的输出:

Nail
Cups
Nail
Cups
Hammer
Cups

编辑:

对于您提到的计数,您可以将item数组的第一个元素强制转换为int,如下所示:

for items in df['Items split']:    
    for item in items:
        item_array = item.lstrip().split(' ')
        for i in range(int(item_array[0])):
            print(' '.join(item_array[1:]))

输出:

Nail
Cups
Cups
Nail
Nail
Nail
Cups
Hammer
Cups
Cups
Cups

相关问题 更多 >

    热门问题