Как найти разницу, то есть, сумму между всеми парами строк в панде?

python numpy pandas dataframe

738 просмотра

1 ответ

4856 Репутация автора

У меня есть следующие панды DataFrame.

import pandas as pd
df = pd.read_csv('filename.csv')

print(df)

     dog      A         B           C
0     dog1    0.787575  0.159330    0.053095
1     dog10   0.770698  0.169487    0.059815
2     dog11   0.792689  0.152043    0.055268
3     dog12   0.785066  0.160361    0.054573
4     dog13   0.795455  0.150464    0.054081
5     dog14   0.794873  0.150700    0.054426
..    ....
8     dog19   0.811585  0.140207    0.048208
9     dog2    0.797202  0.152033    0.050765
10    dog20   0.801607  0.145137    0.053256
11    dog21   0.792689  0.152043    0.055268
    ....

Я хочу найти абсолютную разницу Aмежду всеми строками. Как это сделать (имея в виду, что данные растут очень быстро)?

Один из способов «сопряжения» данных - попытаться:

df1 = df.set_index("dog")

from itertools import combinations
cc = list(combinations(df,2))

out = pd.DataFrame([df1.loc[c,:].sum() for c in cc], index=cc)

Однако это только подведение итогов. Как вы делаете несколько операций?

Автор: ShanZhengYang Источник Размещён: 06.07.2016 03:16

Ответы (1)


4 плюса

183227 Репутация автора

Решение

Рассмотрим следующий кадр данных:

import numpy as np
import pandas as pd

df = pd.DataFrame({'Dog': list('ABCDEFG'), 'A': range(7)})[['Dog', 'A']]
df

введите описание изображения здесь

Используйте функцию numpy subtract.outer, затем возьмите абсолютное значение.

df1 = pd.DataFrame(np.abs(np.subtract.outer(df.A, df.A)), df.Dog, df.Dog)
df1

введите описание изображения здесь

чтобы получить список комбинаций:

stacked = df1.stack()
pd.DataFrame({'Dogs': stacked.index.to_series(), 'Diff': stacked})[['Dogs', 'Diff']].reset_index(drop=True)

введите описание изображения здесь

Автор: piRSquared Размещён: 06.07.2016 03:30
Вопросы из категории :
32x32