我的pandas数据帧如下所示:
Person ID ZipCode Gender
0 12345 882 38182 Female
1 32917 271 88172 Male
2 18273 552 90291 Female
我想将每行复制3次,如下所示:
Person ID ZipCode Gender
0 12345 882 38182 Female
0 12345 882 38182 Female
0 12345 882 38182 Female
1 32917 271 88172 Male
1 32917 271 88172 Male
1 32917 271 88172 Male
2 18273 552 90291 Female
2 18273 552 90291 Female
2 18273 552 90291 Female
当然,重新设置索引,使其成为:
0
1
2
...
我尝试了以下解决方案:
pd.concat([df[:5]]*3, ignore_index=True)
和:
df.reindex(np.repeat(df.index.values, df['ID']), method='ffill')
但它们都不起作用。
发布于 2018-06-11 06:41:03
版本1:
尝试使用np.repeat
newdf = pd.DataFrame(np.repeat(df.values, 3, axis=0))
newdf.columns = df.columns
print(newdf)
上面的代码将输出:
Person ID ZipCode Gender
0 12345 882 38182 Female
1 12345 882 38182 Female
2 12345 882 38182 Female
3 32917 271 88172 Male
4 32917 271 88172 Male
5 32917 271 88172 Male
6 18273 552 90291 Female
7 18273 552 90291 Female
8 18273 552 90291 Female
np.repeat
重复df
,3
时间的值。
然后,我们使用赋值new_df.columns = df.columns
来添加列。
版本2:
您还可以在第一行中指定列名,如下所示:
newdf = pd.DataFrame(np.repeat(df.values, 3, axis=0), columns=df.columns)
print(newdf)
上面的代码还将输出:
Person ID ZipCode Gender
0 12345 882 38182 Female
1 12345 882 38182 Female
2 12345 882 38182 Female
3 32917 271 88172 Male
4 32917 271 88172 Male
5 32917 271 88172 Male
6 18273 552 90291 Female
7 18273 552 90291 Female
8 18273 552 90291 Female
发布于 2018-06-11 08:27:16
使用concat
pd.concat([df]*3).sort_index()
Out[129]:
Person ID ZipCode Gender
0 12345 882 38182 Female
0 12345 882 38182 Female
0 12345 882 38182 Female
1 32917 271 88172 Male
1 32917 271 88172 Male
1 32917 271 88172 Male
2 18273 552 90291 Female
2 18273 552 90291 Female
2 18273 552 90291 Female
发布于 2021-08-20 14:58:43
您可以尝试以下代码:
df = df.iloc[df.index.repeat(3),:].reset_index()
df.index.repeat(3)
将创建一个列表,其中每个索引值将重复3次,df.iloc[df.index.repeat(3),:]
将帮助生成包含该列表返回的行的数据帧。
https://stackoverflow.com/questions/50788508
复制相似问题