如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序

Posted

技术标签:

【中文标题】如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序【英文标题】:How to sort a dataset by partial search within a row's title in pandas/python 【发布时间】:2019-09-28 15:06:50 【问题描述】:

我有一个大型数据集,只能按其描述进行排序。描述通过将产品命名为:ProductVariantSpesification 来描述产品。我想整理 Variant 并创建新数据集,仅包括具有相同 Variant 的数据集。

我试过了:

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

【问题讨论】:

【参考方案1】:

检查str.findallgroupby

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']

【讨论】:

能否重新设置新列表的索引? @aosa 添加y.reset_index(drop=True).to_excel(str(x)+'.xlsx') 谢谢!然后如何在 for 循环之后检索列表之一? @aosa 我不确定你的意思,想提出一个新问题吗? 我想稍后在代码中使用不同的 y 列表。 for 循环后的简单命令可以是 print(y[400]) 或 df2 = y[600]....【参考方案2】:

试试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

【讨论】:

以上是关于如何在熊猫/python中的行标题中通过部分搜索对数据集进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在python中通过多个条件合并不同数量的行和列

如何在python中获取熊猫数据框的行列表? [复制]

循环遍历熊猫中的行[重复]

如何使用python在selenium中通过其id名称的一部分查找元素

如何在熊猫中选择具有特定字符串模式的行?

在python中通过MySQL进行迭代的问题