熊猫数据框中R的等效'rep'

时间:2019-01-09 04:02:03

标签: python r pandas dataframe rep

我已经搜索了类似的问题,例如“ Python中的等效R函数rep”。

在R中,rep可以用于数组或数据框,并且可以设置参数each以指定是要重复每个元素还是要重复整个列表/数据框。

但是在Python中,您必须区分数组和数据框。

对于数组,np.repeat将重复每个元素,np.tile将重复整个数组。

x=['a','b']

np.repeat(x,2)#repeat each element twice
Out[85]: array(['a', 'a', 'b', 'b'], dtype='<U1')

np.tile(x,2)#repeat the whole array twice
Out[86]: array(['a', 'b', 'a', 'b'], dtype='<U1')

用于Pandas数据框。 pd.concat可用于重复整个数据帧:

d=pd.DataFrame({'x':['a','b'],'y':['c','d']})
d
Out[94]: 
   x  y
0  a  c
1  b  d


pd.concat([d]*2)
Out[93]: 
   x  y
0  a  c
1  b  d
0  a  c
1  b  d

我的问题是如何在熊猫数据框中重复每一行,而不是整体重复。我想要的结果是:

x y
a c
a c
b d 
b d

无论如何,我希望Python中有一个像'rep'这样的函数,它既可以用于list和dataframe,也可以指定整个重复或每个元素重复。

2 个答案:

答案 0 :(得分:4)

pandas中,您可以将reindexnp.repeat一起使用

d.reindex(np.repeat(df.index.values,2))
   x  y
0  a  c
0  a  c
1  b  d
1  b  d

或重新构建数据框

pd.DataFrame(np.repeat(d.values,2,axis=0),columns=d.columns)
   x  y
0  a  c
1  a  c
2  b  d
3  b  d

concatsort_index

pd.concat([d]*2).sort_index()
   x  y
0  a  c
0  a  c
1  b  d
1  b  d

答案 1 :(得分:1)

您还可以将np.repeatnp.arange结合使用:

In [183]: d.iloc[np.repeat(np.arange(len(d)), 2)]
Out[183]: 
   x  y
0  a  c
0  a  c
1  b  d
1  b  d