我有以下df:
code . role . persons
123 . Janitor . 3
123 . Analyst . 2
321 . Vallet . 2
321 . Auditor . 5第一行意味着我有3个人扮演看门人的角色。我的问题是我需要为每个人准备一行代码。我的df应该是这样的:
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我怎么能用熊猫做到这一点呢?
发布于 2017-11-17 02:29:03
reindex+ repeat
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 . 5PS:你可以添加.reset_index(drop=True)来获得新的索引
发布于 2017-11-17 02:34:03
温的解决方案真的很好,很直观。这里有一个替代方法,在df.values上调用repeat。
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发布于 2020-10-22 23:07:16
没有足够的声誉来评论,但基于@CS95的回答和@lmiguelvargasf的评论,可以用以下方式保留dtype:
pd.DataFrame(
df.values.repeat(df.persons, axis=0),
columns=df.columns,
).astype(df.dtypes)https://stackoverflow.com/questions/47336704
复制相似问题