好的,所以我试图解决一个挑战,说我必须增加一个图的边的权重。我愿意选择任何我想要的作为我的权重,我选择添加1每次我在数据框架中发现一个重复的行。问题就像这个数据集:https://www.kaggle.com/datasets/csanhueza/the-marvel-universe-social-network?select=hero-network.csv(英雄网络)我们有几行两列,我必须找到一种方法来比较每一行与另一行,如果我发现一个值不止一次添加1作为它的权重。至于.duplicate()函数,我知道有更多的行有相同的两个英雄彼此连接所以我的问题是我真的不知道该怎么做。任何帮助都太好了!
如果您想计算每个唯一行在DataFrame中出现的次数,可以使用groupby:
df.groupby(by=['hero1','hero2']).size()
解释:groupby
创建不同行的组;size()
计算每个组中存在的行数。
一个更通用的解决方案,适用于DataFrame中的每个列数:
df.groupby(df.columns.tolist()).size()
我不知道这是否是你想要的,但它似乎是你所要求的。代码是"比较行"。但看起来您要求的只是将每列中相同名称的数量相加。我还使用了value_counts()。
import numpy as np
import pandas as pd
#make a datafram with 2 columns, one and two, filled with letters. some match, some don't.
one=['a','b','c','d','a','a','a','b','f','g']
two=['a','b','c','a','b','c','g','g','f','f']
weight=np.ndarray.tolist(np.zeros(len(one)))
data1 = {'one': one, 'two': two,'weight': weight}
df1 = pd.DataFrame(data1)
#df1.iat[i,1]) ==> how to index down the right hand column
for i in range(len(one)):
if df1.iat[i,1]==df1.iat[i,0]:
df1.iat[i,2] = int(1)
else:
df1.iat[i,2]=None
print(df1)
df2=pd.DataFrame({'one': one, 'two': two})
print(df2['one'].value_counts())