大熊猫:列之间的映射重叠

时间:2020-10-23 00:03:12

标签: 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,反之亦然。

我可以获取groupby计数,以查看两列中每个元素映射到多少个元素

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的元素重叠?

例如,在col1中,12都映射到b中的col2

输出可以是col1中每个元素的重叠数量的计数,也可以是与其重叠的元素的列表

结果:

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

2 个答案:

答案 0 :(得分:0)

您可以只用groupbyagg

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

答案 1 :(得分:0)

尝试在您的Jupyter笔记本中运行此代码;我认为这就是您想要获得的输出。它为col2中的每个唯一值提供col1计数。

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