首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Pandas Dataframe中从像"A BCD1-5“这样的单元格创建新行

在Pandas Dataframe中从像"A BCD1-5“这样的单元格创建新行
EN

Stack Overflow用户
提问于 2021-07-02 00:45:40
回答 2查看 43关注 0票数 0

我有一个包含产品库存信息的CSV文件。目前一些产品被列为五组,如"A BCD 1-5","A BCD 6-10“等。我需要将这些分组转换为5行,这样每一行都将是格式"A BCD 1","A BCD 2","A BCD 3”等。我在想,我将需要使用一堆不同的正则表达式来找到"1-5"," 6-10“,并从中创建新的行,但我有点卡住了。

代码语言:javascript
运行
复制
df = pd.DataFrame([{'var1': 'a', 'var2': '1-5'},
           {'var1': 'b', 'var2': '6-10'}])

从这个开始:

代码语言:javascript
运行
复制
|Name|Inventory Number|
|:---|---:|
|x|A BCD 1-5|
|x|A BCD 6-10|

要这样做:

代码语言:javascript
运行
复制
|Name|Inventory Number|
|:---|---:|
|x|A BCD 1|
|x|A BCD 2|
|x|A BCD 3|
|x|A BCD 4|
|x|A BCD 5|
|x|A BCD 6|
|x|A BCD 7|
|x|A BCD 8|
|x|A BCD 9|
|x|A BCD 10|
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-02 01:03:50

另一种方式:

代码语言:javascript
运行
复制
>>>  df['Inventory Number'].str.extract(r'(.*) (\d+)-(\d+)') \
                           .dropna(how='all') \
                           .apply(lambda x: [f'{x[0]} {i}'
                                      for i in np.arange(int(x[1]), int(x[2])+1)],
                                  axis='columns').explode()

0     A BCD 1
0     A BCD 2
0     A BCD 3
0     A BCD 4
0     A BCD 5
1     A BCD 6
1     A BCD 7
1     A BCD 8
1     A BCD 9
1    A BCD 10
dtype: object
票数 1
EN

Stack Overflow用户

发布于 2021-07-02 00:55:26

这里有一种方法:

代码语言:javascript
运行
复制
df[['Inventory Name', 'var2']] = df.pop(
    'Inventory Number').str.rsplit(' ', n=1, expand=True)
df = df.assign(var2=df.var2.str.split(
    '-').apply(lambda x: np.arange(int(x[0]), int(x[1])+1))).explode('var2')
df = df.astype(str).set_index('Name').agg(
    ' '.join, 1).reset_index(name='Inventory Number')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68214036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档