首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据列值重复pandas DataFrame中的行

根据列值重复pandas DataFrame中的行
EN

Stack Overflow用户
提问于 2017-11-17 02:25:27
回答 3查看 15.6K关注 0票数 26

我有以下df:

代码语言:javascript
复制
code . role    . persons
123 .  Janitor . 3
123 .  Analyst . 2
321 .  Vallet  . 2
321 .  Auditor . 5

第一行意味着我有3个人扮演看门人的角色。我的问题是我需要为每个人准备一行代码。我的df应该是这样的:

代码语言:javascript
复制
df:

code . role    . persons
123 .  Janitor . 3
123 .  Janitor . 3
123 .  Janitor . 3
123 .  Analyst . 2
123 .  Analyst . 2
321 .  Vallet  . 2
321 .  Vallet  . 2
321 .  Auditor . 5
321 .  Auditor . 5
321 .  Auditor . 5
321 .  Auditor . 5
321 .  Auditor . 5

我怎么能用熊猫做到这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-17 02:29:03

reindex+ repeat

代码语言:javascript
复制
df.reindex(df.index.repeat(df.persons))
Out[951]: 
   code  .     role ..1  persons
0   123  .  Janitor   .        3
0   123  .  Janitor   .        3
0   123  .  Janitor   .        3
1   123  .  Analyst   .        2
1   123  .  Analyst   .        2
2   321  .   Vallet   .        2
2   321  .   Vallet   .        2
3   321  .  Auditor   .        5
3   321  .  Auditor   .        5
3   321  .  Auditor   .        5
3   321  .  Auditor   .        5
3   321  .  Auditor   .        5

PS:你可以添加.reset_index(drop=True)来获得新的索引

票数 52
EN

Stack Overflow用户

发布于 2017-11-17 02:34:03

温的解决方案真的很好,很直观。这里有一个替代方法,在df.values上调用repeat

代码语言:javascript
复制
df

   code     role  persons
0   123  Janitor        3
1   123  Analyst        2
2   321   Vallet        2
3   321  Auditor        5


pd.DataFrame(df.values.repeat(df.persons, axis=0), columns=df.columns)

   code     role persons
0   123  Janitor       3
1   123  Janitor       3
2   123  Janitor       3
3   123  Analyst       2
4   123  Analyst       2
5   321   Vallet       2
6   321   Vallet       2
7   321  Auditor       5
8   321  Auditor       5
9   321  Auditor       5
10  321  Auditor       5
11  321  Auditor       5
票数 8
EN

Stack Overflow用户

发布于 2020-10-22 23:07:16

没有足够的声誉来评论,但基于@CS95的回答和@lmiguelvargasf的评论,可以用以下方式保留dtype:

代码语言:javascript
复制
pd.DataFrame(
    df.values.repeat(df.persons, axis=0),
    columns=df.columns,
).astype(df.dtypes)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47336704

复制
相关文章

相似问题

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