添加匹配列名和行名的值

时间:2017-10-26 19:09:33

标签: python pandas

快速提问我是如何最好地实施的。我正在生成一个矩阵,用于计算在列表的大量排列中列出的两个项目彼此相邻的次数。我的代码看起来像这样:

agreement_matrix = pandas.DataFrame(0, index=names, columns=names)
for list in bunch_of_lists:
    for i in range(len(list)-1):
        agreement_matrix[list[i]][list[i+1]] += 1

它生成一个类似的数组:

    A   B   C   D
A   0   2   1   1
B   2   0   1   1
C   1   1   0   2
D   1   1   2   0

因为我不太关心订单,所以我想添加价值所以就像这样:

    A   B   C   D
A   0   4   2   2
B   0   0   2   2
C   0   0   0   4
D   0   0   0   0

有没有快速/简单的方法来实现这一目标?我一直在四处奔走,一代又一代,并在我添加价值时尝试这样做。

3 个答案:

答案 0 :(得分:3)

使用use_count

np.tri*

调用np.triu(df) + np.tril(df).T array([[0, 4, 2, 2], [0, 0, 2, 2], [0, 0, 0, 4], [0, 0, 0, 0]]) 构造函数:

DataFrame

答案 1 :(得分:1)

避免第一次循环的熊猫解决方案:

values=['ABCD'[i] for i in np.random.randint(0,4,100)] # data

df=pd.DataFrame(values)
df[1]=df[0].shift()
df=df.iloc[1:]
df.values.sort(axis=1)
df[2]=1

res=df.pivot_table(2,0,1,np.sum,0)
#
#1  A   B   C   D
#0               
#A  2  14  11  16
#B  0   5   9  13
#C  0   0  10  17
#D  0   0   0   2

答案 2 :(得分:1)

解决问题..

np.triu(df.values*2)#df.values.T+df.values
Out[595]: 
array([[0, 4, 2, 2],
       [0, 0, 2, 2],
       [0, 0, 0, 4],
       [0, 0, 0, 0]], dtype=int64)

然后你做

pd.DataFrame(np.triu(df.values*2), df.index, df.columns)
Out[600]: 
   A  B  C  D
A  0  4  2  2
B  0  0  2  2
C  0  0  0  4
D  0  0  0  0