Эквивалентный 'rep' R в кадре данных Pandas - PullRequest
0 голосов
/ 09 января 2019

Я искал несколько похожих вопросов, таких как 'эквивалентная функция R в Python'.

В 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 была функция, подобная «arep», которую можно использовать как для списка, так и для фрейма данных, а также для указания повтора в целом или повторения каждого элемента.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы также можете использовать np.repeat с 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
0 голосов
/ 09 января 2019

В 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
...