2017-11-30 19 views
1

私はこのような構造を持つパンダのデータフレームを持っている:ヒートマップマトリックスにデータフレームを変換しますか?

与え
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] 

を私は正方行列に変換したい、で見られるユニークなシンボルの大きさすべての交点がこのペアの周波数である(ここではペア[A、B、C、D、Eのように5: 'A'、 'B'、 'C​​'、 'D' B]は3回一緒に見え、ペア[D、A] - 1回だけです.3つ以上の記号が一緒にある場合は、すべての組み合わせを考慮してください)

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

私はかなり初心者ですが、すべての組み合わせを通過するループを作成しようとしました。エントリの中にアイテムの量があるかもしれないという事実に問題があります。

+0

結果に問題がありますか?そうなら、完全な結果行列が必要になります。これは表示されません。そうでない場合は、(A、D)が行1に表示され、(D、A)が行3に表示されるため(A、D) – elphz

答えて

2

順不同のペアを使用する場合は、次の操作が必要です。

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() 
関連する問題