Есть ли Pandas эквивалент бесчисленного количества тидиров? - PullRequest
1 голос
/ 01 мая 2020

Предположим, у нас есть таблица с группировками переменных и их частот:

В R:

> df

# A tibble: 3 x 3
  Cough Fever cases
  <lgl> <lgl> <dbl>
1 TRUE  FALSE     1
2 FALSE FALSE     2
3 TRUE  TRUE      3

Тогда мы можем использовать tidyr::uncount, чтобы получить кадр данных с отдельными случаями. :

> uncount(df, cases)

# A tibble: 6 x 2
  Cough Fever
  <lgl> <lgl>
1 TRUE  FALSE
2 FALSE FALSE
3 FALSE FALSE
4 TRUE  TRUE 
5 TRUE  TRUE 
6 TRUE  TRUE 

Есть ли эквивалент в Python / Pandas?

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Я не нашел эквивалентной функции в Python, но это работает

df2 = df.pop('cases')
df = pd.DataFrame(df.values.repeat(df2, axis=0), columns=df.columns)

df['cases'] передается в df2, затем вы создаете новый DataFrame с элементами из оригинала DataFrame повторяется согласно количеству в df2. Пожалуйста, дайте мне знать, если это поможет.

0 голосов
/ 01 мая 2020

У вас есть индекс строки и повторите его в соответствии с количеством, например, в R вы можете сначала сделать:

df[rep(1:nrow(df),df$cases),]

, чтобы получить данные, подобные вашим:

df = pd.DataFrame({'x':[1,1,2,2,2,2],'y':[0,1,0,1,1,1]})
counts = df.groupby(['x','y']).size().reset_index()
counts.columns = ['x','y','n']

    x   y   n
0   1   0   1
1   1   1   1
2   2   0   1
3   2   1   3

Тогда:

counts.iloc[np.repeat(np.arange(len(counts)),counts.n),:2]

    x   y
0   1   0
1   1   1
2   2   0
3   2   1
3   2   1
3   2   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...