我需要像这样在熊猫数据框中复制一些行
name times
A 2
B 1
C 3
D 20
...
我需要的是在col2值小于20时复制行
我现在正在做的是:
for t in df["times"]:
if t < 20:
df = df.loc[df.index.repeat(t)]
但是脚本一直在运行,我必须停止运行(我已经等了很久了...)。
有什么方法可以改善这一点或以其他方式做到吗?
答案 0 :(得分:1)
使用:
#condition lt for <
mask = df['times'].lt(20)
#filter by boolean indexing
df1 = df[mask].copy()
#repeat rows
df1 = df1.loc[df1.index.repeat(df1['times'])]
#add rows higher like 20, sorting and create default index
df = pd.concat([df1, df[~mask]]).sort_index().reset_index(drop=True)
print (df)
name times
0 A 2
1 A 2
2 B 1
3 C 3
4 C 3
5 C 3
6 D 20