pandas 比较 Dataframe 中的行值

v7pvogib  于 2022-12-28  发布在  其他
关注(0)|答案(2)|浏览(183)

好吧,我正在尝试解决一个挑战,即我必须给图的边添加权重。我愿意选择任何我想要的权重,并且我选择每次在数据框中发现重复行时添加1。问题是在这个数据集中:https://www.kaggle.com/datasets/csanhueza/the-marvel-universe-social-network?select=hero-network.csv(英雄网络)我们有几行2列,我必须找到一种方法来比较每一行与另一行,如果我发现一个值不止一次添加一个1作为其权重。至于.duplicated()函数,我知道事实上有更多的行有相同的两个英雄连接在一起所以我的问题是我真的不知道该怎么做。任何帮助都是最好的!

1l5u6lss

1l5u6lss1#

如果要计算每个唯一行在DataFrame中出现的次数,可以使用groupby来完成:

df.groupby(by=['hero1','hero2']).size()

说明:groupby创建不同行的组; size()计算每组中存在多少行。
更通用的解决方案适用于DataFrame中的所有列数:

df.groupby(df.columns.tolist()).size()
lyfkaqu1

lyfkaqu12#

我不知道这是不是你想要的,但看起来这就是你想要的。代码是“比较行”,但看起来你想要的只是对每列中相同名称的个数求和。我也使用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())

相关问题