将数据帧转换为热图矩阵?

2024-04-19 13:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,结构如下:

df = pd.DataFrame({'entry': [['A','B','C'],['A','B','E','D'],['C'],['D','A', 'B'],['D','C','E'],['E','A']]})

它给出:

    entry
0   [A, B, C]
1   [A, B, E, D]
2   [C]
3   [D, A, B]
4   [D, C, E]
5   [E, A]

我想把它转换成方阵,在数据帧中看到的唯一符号的大小(在本例中是5:'A','B','C','D','E'),其中每个交集都是这对被一起看到的频率(比如这里这对[A,B]被一起看到3次,对[D,A]-只有一次。如果有3个或更多的符号在一起,我希望所有的组合都考虑在内。)所以输出是这样的:

   A B C D E
A    3 1 1 1
B        1 1
C        1 1
D          2
E

我在这个领域是个初学者,试着写一个循环,通过所有的组合。有一个问题,事实上,有可能是任何数量的项目内的条目。你知道吗


Tags: 数据项目dataframedf数量符号条目结构
1条回答
网友
1楼 · 发布于 2024-04-19 13:05:48

如果您想要无序的配对,下面的应该可以使用。你知道吗

import pandas as pd
import itertools

# First get a DataFrame (or could be a Series) of the pairwise combinations in each row
combinations = df['entry'].apply(lambda x: list(itertools.combinations(sorted(x), 2)))

# Then get a list of unique values - A,B,C,D,E
unique_values = sorted(list(set(
    symbol for symbol_list in df.values.flatten() for symbol in symbol_list)))

# Create empty dataframe
result = pd.DataFrame(columns=unique_values, index=unique_values)

# Iterate through symbols and fill dataframe
for symbol_pair in list(itertools.combinations(unique_values, 2)):
    result.loc[symbol_pair[0], symbol_pair[1]] = combinations.apply(lambda x: symbol_pair in x).sum()

相关问题 更多 >