#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