首页 > 解决方案 > 如何使用 python 和 pandas 计算数据框中的对

问题描述

我在excel中的数据是这样的。

在此处输入图像描述

fi 表示某些特征,IDi 表示客户 ID,数字表示某个特征出现的时间。

我想计算这些 ID 中一起出现的特征对,并想出一些这样的 在此处输入图像描述

该矩阵应按以下方式解释: (f1,f2) 一起出现 3 次 (in ID2,ID3,ID4) (f2,f3) 一起出现 1 次 (in ID3) (f1,f4) 一起出现 3 次(在 ID1、ID2、ID3 中)等等

这是我的jupyter 在此处输入图像描述

标签: pythonexceldataframecount

解决方案


import pandas as pd

df=pd.read_excel("data.xlsx")
print(df)

# convert to binary

df2=df
for i in range(4) :
    for j in range(1,5) :
        if df2.iloc[i,j] > 0 :
            df2.iloc[i,j] = 1
print(df2)

ar=df2.iloc[:,1:].values # extract f1-f4 array values | ref#2

df3 = df2
df3.rename(columns = {'ID1':'f1','ID2':'f2','ID3':'f3','ID4':'f4'}, inplace = True ) # ref#1

for i in range(4) :
    for j in range(1,5) :
        if i == (j-1) :
            df3.iloc[i,j] = 0
        else : 
            df3.iloc[i,j] = sum(ar[i]*ar[j-1]) # found out that df*df didn't work.
            
print(df3)

dfa = dfb是欺骗......它实际上就像一个指针,而不是变量。打印 df2 & df 你可以看到。df2=df只是共享参考,而不是启动新变量。这就是为什么df = sum(df*df)没有工作。

请试一试,如果它的工作/可以理解/不可以分享。

参考:

[1] https://www.geeksforgeeks.org/how-to-rename-columns-in-pandas-dataframe/

[2] Pandas 数据框,使用 iloc 替换最后一行


推荐阅读