微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

熊猫行复制python

如何解决熊猫行复制python

所以我的数据框有多个列,其中一列名为“multiple”,其中包含布尔值,只有 1 和 0。现在,我只想为所有 df.loc[df.multiple==1] 复制所有行 4 次。我怎样才能做到这一点? (我不想复制索引)

example input:
df=
index strings  multiple
0        A        0
1        B        1
2        C        1
3        D        0
4        E        1


Expected output:

index strings  multiple
0        A        0
1        B        1
2        B        1
3        B        1
4        B        1
5        B        1
6        C        1
7        C        1
8        C        1
9        C        1
10       C        1
11       D        0
12       E        1
13       E        1
14       E        1
15       E        1
16       E        1

解决方法

这就是 numpy.repeat 的用途:

import pandas as pd
import numpy as np


df = pd.DataFrame([['A',0],['B',1],['C',['D',['E',1]],columns=['strings','multiple'])

df = pd.DataFrame(np.repeat(df.values,df['multiple']*4+1,axis=0),columns=df.columns)

print(df)
#    strings multiple
# 0        A        0
# 1        B        1
# 2        B        1
# 3        B        1
# 4        B        1
# 5        B        1
# 6        C        1
# 7        C        1
# 8        C        1
# 9        C        1
# 10       C        1
# 11       D        0
# 12       E        1
# 13       E        1
# 14       E        1
# 15       E        1
# 16       E        1
,

你可以用熊猫来做到:

(df.groupby('multiple')
   .apply(lambda x: pd.concat([x]*4) if x.name else x)
   .droplevel(level=0)
   .sort_index()
   .reset_index(drop=True)
)
,

这是另一种选择,基于@Vinzent 的回答。 它使用相同的方法来构建重复,但不需要重建完整的数据帧。相反,它基于索引。在提供的数据集和更大的数据集上,此解决方案的速度提高了约 30%。

df.loc[np.repeat(df.multiple,df.multiple.values*4+1).index].reset_index(drop=True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。