Как отсортировать набор данных путем частичного поиска в заголовке строки в pandas / python - PullRequest
0 голосов
/ 10 мая 2019

У меня большой набор данных, который можно отсортировать только по его описанию. Описание описывает продукт, называя его следующим образом: ProductVariantSpesification. Я хочу разобраться в Варианте и создать новые наборы данных, включающие только тех, у кого есть тот же Вариант.

Я пытался:

400_variants = df[df[Description].str.contains("400")]

Как это будет выглядеть:

import pandas as pd
df = pd.read_excel(r'raw_data.xlsx', header = 0)

#Some code

df.to_excel(r'400.xlsx')

Я начинаю с чего-то вроде этого:

Index   Description Quantity    Date
1   Ketchup400J 5   5/10/2019
2   Ketchup600J 4   5/11/2019
3   Ketchup800U 6   5/12/2019
4   Ketchup400U 7   5/13/2019
5   Ketchup600J 8   5/14/2019
6   Ketchup400U 9   5/15/2019
7   Ketchup800i 5   5/16/2019
8   …   …   …

И хотите, чтобы выходные данные для варианта 400 были:

Index   Description Quantity    Date
1   Ketchup400J 5   5/10/2019
2   Ketchup400U 7   5/13/2019
3   Ketchup400U 9   5/15/2019

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Попробуйте str.contains

>>> import pandas as pd
>>> df = pd.DataFrame({'Description':['Ketchup400J', 'Ketchup400K', 'Mustard400J', 'Ketchup300K','Mustard300K'],'Quantity':range(5),'Date':pd.date_range(start='1/1/2019',periods=5, freq='D')})
>>> df
   Description  Quantity       Date
0  Ketchup400J         0 2019-01-01
1  Ketchup400K         1 2019-01-02
2  Mustard400J         2 2019-01-03
3  Ketchup300K         3 2019-01-04
4  Mustard300K         4 2019-01-05

>>> df[df.Description.str.contains('400')]
   Description  Quantity       Date
0  Ketchup400J         0 2019-01-01
1  Ketchup400K         1 2019-01-02
2  Mustard400J         2 2019-01-03
0 голосов
/ 10 мая 2019

Проверьте с str.findall и с groupby

for x , y in df.groupby(df.Description.str.findall(r'[0-9]+').str[0]):
    print(y)
    y.to_excel(str(x)+'.xlsx')

   Index  Description  Quantity       Date
0      1  Ketchup400J         5  5/10/2019
3      4  Ketchup400U         7  5/13/2019
5      6  Ketchup400U         9  5/15/2019
   Index  Description  Quantity       Date
1      2  Ketchup600J         4  5/11/2019
4      5  Ketchup600J         8  5/14/2019
   Index  Description  Quantity       Date
2      3  Ketchup800U         6  5/12/2019
6      7  Ketchup800i         5  5/16/2019

Обновление

d={x : y for  x , y in df.groupby(df.Description.str.findall(r'[0-9]+').str[0])}
d['400']
...