我有如下数据。
id, name, password, note, num
1, hoge, xxxxxxxx, aaaaa, 2
2, hoge, xxxxxxxx, bbbbb, 1
3, moge, yyyyyyyy, ccccc, 2
4, zape, zzzzzzzz, ddddd, 3
我想使用groupby使用相同的名称和密码来制作framedata。在这种情况下,将1,hoge和2,hoge视为相同的数据。那我想算3 来自num列。 我尝试如下。
df1 = pd.read_csv("sample.csv")
df2 = df1.groupby(['name','password']).count()
print(df2[df2[note] > 1])
它是这样的
name, password, note, num
hoge, xxxxxxxx, 2, 2
如何获取num值的总和?
答案 0 :(得分:0)
我相信您需要GroupBy.size
或count
来排除transform
的NaN
行,而新Series
的大小与原始DaatFrame
相同,因此可以使用sum
进行过滤:
s = df1.groupby(['name','password'])['note'].transform('size')
s = df1.groupby(['name','password'])['note'].transform('count')
out = df1.loc[s > 1, 'num'].sum()
print (out)
3
如果只想计算DataFrame.duplicated
过滤的重复行,并指定检查重复项的列:
out = df1.loc[df1.duplicated(['name','password'], keep=False), 'num'].sum()
print (out)
3