假设我有以下数据:
import pandas as pd
df = pd.DataFrame([
['01', 'A'],
['01', 'B'],
['01', 'C'],
['02', 'A'],
['02', 'B'],
['03', 'B'],
['03', 'C']
], columns=['id', 'category'])
如何创建这样的频率矩阵?
A B C
A 2 2 1
B 2 3 2
C 1 2 2
一种方法是通过self join:
result = df.merge(df, on='id')
pd.pivot_table(
result,
index='category_x',
columns='category_y',
values='id',
aggfunc='count'
)
但是这会使数据量非常大,有没有什么有效的方法来做到这一点,而不使用自连接?
编辑我的原始帖子因重复pivot_table
而关闭。但是pivot_table
只接受不同的columns
和index
。在我的例子中,我只有一个category
列。所以呢
# Does not work
pivot_table(df, column='category', index='category', ...)
不起作用
1条答案
按热度按时间pqwbnv8z1#
下面是一种使用combinations_with_replacement和Counter的方法,来自Python标准库:
然后: