Pandas 数据帧中 R 的等效 'rep'
Equivalent 'rep' of R in Pandas dataframe
我搜索了一些类似的问题,例如“Python 中的等效 R 函数表示”。
在R中,rep可用于数组或数据帧,您可以设置参数each
来指定是要重复每个元素还是重复整个list/dataframe。
但在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
我的问题是如何重复 pandas 数据框中的每一行,而不是将其作为一个整体重复。我想要的结果是:
x y
a c
a c
b d
b d
无论如何,我希望Python中有一个函数like'rep'可以同时用于list和dataframe,也可以指定作为一个整体重复或重复每个元素。
在 pandas
中,您可以将 reindex
与 np.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
还有 concat
和 sort_index
pd.concat([d]*2).sort_index()
x y
0 a c
0 a c
1 b d
1 b d
你也可以使用np.repeat with np.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
我搜索了一些类似的问题,例如“Python 中的等效 R 函数表示”。
在R中,rep可用于数组或数据帧,您可以设置参数each
来指定是要重复每个元素还是重复整个list/dataframe。
但在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
我的问题是如何重复 pandas 数据框中的每一行,而不是将其作为一个整体重复。我想要的结果是:
x y
a c
a c
b d
b d
无论如何,我希望Python中有一个函数like'rep'可以同时用于list和dataframe,也可以指定作为一个整体重复或重复每个元素。
在 pandas
中,您可以将 reindex
与 np.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
还有 concat
和 sort_index
pd.concat([d]*2).sort_index()
x y
0 a c
0 a c
1 b d
1 b d
你也可以使用np.repeat with np.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