Как запустить корреляции для каждого подмножества строк в Pandas? - PullRequest
0 голосов
/ 14 сентября 2018

Предположим, у меня есть вымышленный pandas dataframe df.

Предположим, что он имеет три столбца: gender, height и weight

Есть ли встроенныйили эффективный метод для получения корреляции height и weight для каждого gender?

Что я сделал до сих пор:

  1. Ручная фильтрация фреймов данных длякаждого пола, а затем запустите
    корреляции для каждого.
  2. Это сработало на моем семпле, но в производственном наборе развалится, потому что у меня больше категорий, чем просто gender.У меня есть сотни.

Пример моего неоптимального кода:

df_m=df[(df['gender']=='male')]
df_m['height'].corr(df_m['weight'])
df_f=df[(df['gender']=='female')]
df_f['height'].corr(df_f['weight'])

Идеальный результат:

'gender' 'correlation'
'male' .9007876876 
'female' .8777687666

1 Ответ

0 голосов
/ 14 сентября 2018
df.groupby('gender').apply(lambda x: x.height.corr(x.weight)).rename('correlation').to_frame()

Последняя часть (rename и to_frame) предназначена только для получения желаемого результата.

Пример

>>> df
   gender  height  weight
0    male       1       4
1    male       2       4
2    male       3       5
3  female       1       4
4  female       2       3
5  female       3       5

>>> df.groupby('gender').apply(lambda x: x.height.corr(x.weight)).rename('correlation').to_frame()
        correlation
gender             
female     0.500000
male       0.866025
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...