Pandas: отображение перекрытия между столбцами

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных следующим образом:

 d = {'col1': [1, 2, 3, 4, 5, 1, 2, 3, 6], 'col2': ['a', 'b', 'a', 'c',  'd', 'b', 'e', 'e', 'e']}
df = pd.DataFrame(data=d)
  

Я хотел бы посмотреть, как col1 отображаются до col2 и наоборот.

Я могу получить количество групп, чтобы увидеть, сколько элементов сопоставляется каждому элементу для обоих столбцов

 df.groupby('col1')['col2'].count().sort_values(ascending=False)

col1
3    2
2    2
1    2
6    1
5    1
4    1

df.groupby('col2')['col1'].count().sort_values(ascending=False)

col2
e    3
b    2
a    2
d    1
c    1
  

Есть ли хороший способ увидеть, какие элементы col1 перекрываются с элементами col2 ?

Например, in col1 , both 1 и 2 map to b in col2 .

Вывод может быть либо подсчетом количества перекрытий для каждого элемента col1 , либо списком элементов, с которыми он перекрывается

Результат:

 d = {'col1': [1, 2, 3, 4, 5, 6], 'col2': [[2, 3], [1], [1, 2, 6], [],  [], [1,2] ]}
overlap = pd.DataFrame(data=d)
  

Ответ №1:

Вы можете просто сделать groupby с agg

 df.groupby('col2').col1.agg(list)
Out[21]: 
col2
a       [1, 3]
b       [2, 1]
c          [4]
d          [5]
e    [2, 3, 6]
Name: col1, dtype: object
  

Ответ №2:

Попробуйте запустить этот код в своем ноутбуке Jupyter; Я думаю, это то, что вы хотели получить в качестве результата. Он предоставляет количество col1 для каждого уникального значения из col2.

 for element in df.col2.unique():
    print(element, 'n',  df.where(df.col2 == element).col1.value_counts())
  

Где выводом является элемент из col1 / количество букв:

 a 
3    1
1    1
 Name: col1, dtype: int64
b 
 1    1
 2    1
 Name: col1, dtype: int64
c 
 4    1
 Name: col1, dtype: int64
d 
 5    1
 Name: col1, dtype: int64
e 
 6    1
 3    1
 2    1
 Name: col1, dtype: int64