Панды означают в двух фреймах данных только в одинаковых столбцах - PullRequest
0 голосов
/ 01 июня 2018

У меня есть уникальное требование, где мне нужно среднее число общих столбцов (на строку) из двух информационных фреймов.

Я не могу придумать питонский способ сделать это.Я знаю, что могу перебрать два фрейма данных и найти общие столбцы, а затем получить среднее число строк, в которых совпадает ключ.

Предполагая, что у меня ниже Фреймы данных: DF1:

Key A   B   C   D   E
K1  2   3   4   5   8
K2  2   3   4   5   8
K3  2   3   4   5   8
K4  2   3   4   5   8

DF2:

Key A   B   C   D
K1  4   7   4   7
K2  4   7   4   7
K3  4   7   4   7
K4  4   7   4   7

В результате DF должны быть средние значения двух DF, каждый столбец в строке, где ключ соответствует.ResultDF:

 Key    A   B   C   D
    K1  3   5   4   6
    K2  3   5   4   6
    K3  3   5   4   6
    K4  3   5   4   6

Я знаю, что я должен поместить пример кода здесь, но я не могу придумать никакой логики для достижения этого до сих пор.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Используйте DataFrame.add, используя Key в качестве индексов:

df1.set_index('Key').add(df2.set_index('Key')).dropna(axis=1) / 2

     A  B  C  D
Key            
K1   3  5  4  6
K2   3  5  4  6
K3   3  5  4  6
K4   3  5  4  6

Альтернатива с concat + groupby.

pd.concat([df1, df2], axis=0).dropna(axis=1).groupby('Key').mean()

     A  B  C  D
Key            
K1   3  5  4  6
K2   3  5  4  6
K3   3  5  4  6
K4   3  5  4  6
0 голосов
/ 01 июня 2018

Попробуйте добавить к фреймам данные вместе, затем используйте функцию панд apply, затем добавьте в нее lambda, затем разделите x на два:

import pandas as pd
df1 = pd.DataFrame({'A': [2,2]})
df2 = pd.DataFrame({'A': [4,4]})
print((df1+df2).apply(lambda x: x/2))

Вывод:

   A
0  3.0
1  3.0

Примечание: это только с фиктивным фреймом данных

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