我的Pandas Dataframe 看起来像这样:
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')
但都没用。
8条答案
按热度按时间bhmjp9jg1#
使用
np.repeat
:版本1:
尝试使用
np.repeat
:上面的代码将输出:
np.repeat
重复df
、3
的值多次。然后,我们添加列并指定
new_df.columns = df.columns
。版本2:
您还可以在第一行中指定列名,如下所示:
以上代码还将输出:
beq87vna2#
这将重复索引并保留列,如op所示
iloc
版本1iloc
版本2dbf7pr2w3#
使用
concat
:wwtsj6pe4#
我不知道为什么从来没有人提出过这一点,但是您可以很容易地将
df.index.repeat
与.loc
结合使用:输出:
eivgtgni5#
你可以这样做。
如果你解释清楚...
kxe2p93d6#
您可以尝试以下代码:
df.index.repeat(3)
将创建一个列表,其中每个索引值将重复3次,并且df.iloc[df.index.repeat(3),:]
将帮助生成一个 Dataframe ,其中的行与该列表返回的行完全相同。tsm1rwdh7#
如果您需要索引重复(例如,对于多索引),并且还需要基于列中的值来计算重复次数,您可以执行以下操作:
这将提供一个DataFrame,其中每条记录都重复,无论“RepeatBasis”列中指示的次数是多少。DataFrame还将获得一个“RepeatIndex”列,您可以将该列与现有索引合并成多索引,从而保持索引唯一性。
如果有人想知道为什么你要做这样的事情,在我的例子中,当我得到的数据中的频率已经被总结,无论出于什么原因,我需要处理奇异观察。
ar5n3qh58#
这个问题还没有足够的答案!下面是一些仍然缺少的允许链接的方法:)
(编辑:更重要的是,如果需要计算副本 * 并且 * 每行具有动态副本计数,则使用
explode
非常有用。例如,如果您具有包含开始日期和结束日期的每个客户的使用情况数据,则可以使用上述方法将数据转换为每个客户的每月使用情况数据。)当然,下面是创建测试数据的代码片段: