有没有一种方法可以列出列表,然后删除列表中的第一项?

时间:2019-05-08 13:02:24

标签: python python-3.x pandas numpy

我正在尝试对一些销售数据进行排序,但是这些数据是按“帐单”收集的,我想查看每个帐单中的项目。

我尝试过拆分列以获取项目列表,但是它们不会像我想要的那样运行。我试图进行迭代,但是我要做的就是删除每行的第一项。

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个Nail和3个Nail。

能够(例如)与另一列中的数字相乘。因此,我可以对每个项目进行计数以获得总计。

最后一部分的说明: 假设我们在一个字段中有2个钉子,3个铁杯和1个稻草。通过拆分帐单并删除数字,我现在可以找到商品之间的相关性,但是我看不到我们实际售出了多少商品。如果可以的话,我想一种解决方案是将整数拆分为最前面,然后将其与项目名称相乘。然后看起来像钉子,钉子,铁杯,铁杯,铁杯,稻草。然后我可以计算指甲出现的次数等等。

1 个答案:

答案 0 :(得分:1)

详细解决方案

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