[英]Heatmap from DataFrame
exp_id | 輸出1 | 輸出2 | 輸出3 |
---|---|---|---|
exp1 | 一種 | b | 鈉鹽 |
exp2 | c | 一種 | b |
exp3 | 一種 | 鈉鹽 | d |
exp4 | 一種 | d | c |
我想創建另一個表,其中“頻率”列描述了前一個表中一個實驗(行)中一對的出現頻率。 然后我需要從這個表中構建一個熱圖,其中顏色的亮度表示熱圖對的出現頻率
一對 | 搭檔1 | 搭檔2 | 頻率 |
---|---|---|---|
1個 | 一種 | b | 2個 |
2個 | 一種 | c | 2個 |
3個 | 一種 | d | 2個 |
4個 | b | 一種 | 2個 |
5個 | b | d | 0 |
6個 | b | c | 1個 |
7 | c | 一種 | 2個 |
8個 | c | b | 1個 |
9 | c | d | 1個 |
10 | d | 一種 | 2個 |
11 | d | b | 0 |
12 | d | c | 1個 |
您可以創建每行的所有組合 ( q1,q2
) 的 dataframe ,然后以兩種方式使用這些組合( q1,q2
和q2,q1
),然后對它們進行計數並創建一個表。
from matplotlib import pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
from itertools import combinations
df = pd.read_html('https://stackoverflow.com/questions/71877699/heatmap-from-dataframe')[0]
combos1 = pd.DataFrame([[q1, q2] for p1, p2, p3 in zip(df['output1'], df['output2'], df['output3'])
for q1, q2 in combinations([p1, p2, p3], 2) if not np.NaN in [q1, q2]],
columns=['q1', 'q2'])
combos2 = pd.DataFrame({'q1': list(combos1['q1']) + list(combos1['q2']),
'q2': list(combos1['q2']) + list(combos1['q1'])})
table = combos2.value_counts().reset_index(name='count').pivot('q1', 'q2', 'count')
sns.heatmap(data=table, annot=True, fmt='.0f', cmap='rocket')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.