Режим расчета в Pandas при использовании группового - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть следующая таблица:

Col1 | Col2 | Col3
AAA  | 1    | a
AAA  | 1    | a
AAA  | 1    | b
AAA  | 2    | b
AAA  | 2    | b
AAA  | 2    | b
AAA  | 3    | a
BBB  | 1    | b
BBB  | 1    | b

Я хочу уменьшить таблицу за два следующих шага:

  1. Найти наиболее часто встречающееся значение вCol3, соответствующее паре значений (Col1, Col2).

  2. Из результата шага 1 сохраните только наиболее часто встречающееся значение, соответствующее значению Col1.

Применение шага 1 к таблице выше: режим (или наиболее часто встречающееся значение), соответствующий (AAA, 1), равен a и т. Д.Мы получаем:

Col1 | Col2 | newCol1
AAA  | 1    | a
AAA  | 2    | b
AAA  | 3    | a
BBB  | 1    | b

Применяя шаг 2 к этой таблице, мы видим, что a - это режим, соответствующий AAA, а b - наиболее часто встречающееся значение, соответствующее BBB - поэтому мыполучить:

Col1 | newCol2
AAA  | a  
BBB  | b

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Давайте сделаем это одной строкой

df.groupby(['Col1','Col2']).Col3.apply(pd.Series.mode).\ 
      groupby(level=0).apply(pd.Series.mode)
Out[136]: 
Col1   
AAA   0    a
BBB   0    b
Name: Col3, dtype: object

Просто для удовольствия

pd.crosstab([df.Col1,df.Col2],df.Col3).idxmax(1).groupby(level=0).apply(pd.Series.mode)
Out[140]: 
Col1   
AAA   0    a
BBB   0    b
dtype: object
0 голосов
/ 24 февраля 2019

То есть вы имеете в виду:

df_new=df.groupby(['Col1','Col2'])['Col3'].apply(lambda x:x.mode()).reset_index([0,1]).\
groupby('Col1')['Col3'].apply(lambda x: x.mode()).reset_index(0).reset_index(drop=True)
print(df_new)

  Col1   Col3
0  AAA      a
1  BBB      b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...