我正在尝试对一些销售数据进行排序,但是这些数据是按“帐单”收集的,我想查看每个帐单中的项目。
我尝试过拆分列以获取项目列表,但是它们不会像我想要的那样运行。我试图进行迭代,但是我要做的就是删除每行的第一项。
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个稻草。通过拆分帐单并删除数字,我现在可以找到商品之间的相关性,但是我看不到我们实际售出了多少商品。如果可以的话,我想一种解决方案是将整数拆分为最前面,然后将其与项目名称相乘。然后看起来像钉子,钉子,铁杯,铁杯,铁杯,稻草。然后我可以计算指甲出现的次数等等。
答案 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