Как использовать сводную таблицу, чтобы показать процент общих значений между несколькими столбцами? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть 6 столбцов, каждый из которых представляет отдельную компанию. Затем у меня есть 600+ строк из 1 или 0 в 6 столбцах, которые указывают, является ли часть контракта для каждой компании (то есть столбца). Эти части могут быть общими для всех компаний (т. Е. Каждый столбец может иметь значение 1, что означает, что для этой части существует 100% единица для всех компаний).

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

Я суммировал каждую строку (столбец «Всего»), а также процент попаданий («1») рядом с каждой компанией. Я хочу подмножество компаний, какие общие части относительно других компаний.

import pandas as pd
df=pd.DataFrame({'Comp_A':[1,1,1,1,0,1],
                 'Comp_B':[1,1,1,1,1,1],
                 'Comp_C':[1,1,1,1,1,1],
                 'Comp_D':[0,1,1,1,0,1],
                 'Comp_E':[1,0,1,1,0,1],
                 'Comp_F':[1,1,0,1,1,0],
                 'Sum': [df.sum()]})

Для каждой строки в 6 компаниях - я хочу визуально представить количество найденных 1 и 0. Это скажет мне, что есть x количество деталей, которые на 100% распространены во всех компаниях, только в Comp_B, C и D и т. Д.

Я открыт как для Excel, так и для Python.

1 Ответ

1 голос
/ 31 октября 2019

Пример кадра данных

import pandas as pd
df=pd.DataFrame({'Comp_A':[1,1,1,1,0,1],
                 'Comp_B':[1,1,1,1,1,1],
                 'Comp_C':[1,1,1,1,1,1],
                 'Comp_D':[0,1,1,1,0,1],
                 'Comp_E':[1,0,1,1,0,1],
                 'Comp_F':[1,1,0,1,1,0],
                 })
print(df)

   Comp_A  Comp_B  Comp_C  Comp_D  Comp_E  Comp_F
0       1       1       1       0       1       1
1       1       1       1       1       0       1
2       1       1       1       1       1       0
3       1       1       1       1       1       1
4       0       1       1       0       0       1
5       1       1       1       1       1       0

Использование DataFrame.apply + Series.value_counts:

count_df=df.apply(lambda x: x.value_counts(),axis=1).fillna(0)
print(count_df)

     0    1
0  1.0  5.0
1  1.0  5.0
2  1.0  5.0
3  0.0  6.0
4  3.0  3.0
5  1.0  5.0

import matplotlib.pyplot as plt
%matplotlib inline
count_df.plot(kind='bar')

Выходное изображение:

enter image description here


, как вы видите строку3 является общим для всех компаний


Проценты:

percentages_comun=(df.sum(axis=1)/len(df.columns))*100
print(percentages_comun)
0     83.333333
1     83.333333
2     83.333333
3    100.000000
4     50.000000
5     83.333333
dtype: float64

percentages_comun.plot(kind='bar')

Выходное изображение:

enter image description here

...