我正在尝试使用重复的值对大熊猫groupby
进行count
df
的操作。我希望仅返回未重复的值。对于预期的输出,我只想确定Val_A
和Val_B
之间的值计数。返回的列可以标记为任何东西,因为我将其重命名。出于这个问题的目的,我将其标记为Val_X
d = ({
'Date' : ['1/2/18','1/2/18','1/2/18','1/2/18','1/2/18','1/2/18'],
'Val_A' : [1,1,2,2,1,1],
'Val_B' : ['X','X','X','X','Y','Y'],
})
df = pd.DataFrame(data=d)
df1 = pd.pivot_table(df, index=['Date'],values=['Val_A','Val_B'],aggfunc= 'count')
输出:
Val_A Val_B
Date
1/2/18 6 6
预期输出:
Val_X
Date
1/2/18 3
答案 0 :(得分:2)
删除重复项并将Val_B传递为值,
pd.pivot_table(df.drop_duplicates(), index=['Date'],values=['Val_B'],aggfunc= 'count')
Val_B
Date
1/2/18 3
答案 1 :(得分:1)
原则上,您可以通过
df1 = pd.pivot_table(df.drop_duplicates(), index=['Date'],values=['Val_A','Val_B'],aggfunc= 'count')
但是,您的示例编号不同。
df.drop_duplicates()
Date Val_A Val_B
0 1/2/18 1 X
2 1/2/18 2 X
4 2/2/18 1 Y
6 2/2/18 2 Y
答案 2 :(得分:1)
如果我对您的理解正确,那么您想返回Val_A
和Val_B
列中Date
中每个组的唯一组合:
df.groupby(['Date', 'Val_A', 'Val_B']).size().reset_index()
Date Val_A Val_B 0
0 1/2/18 1 X 2
1 1/2/18 1 Y 2
2 1/2/18 2 X 2
如果需要尺寸:
g = df.groupby(['Date', 'Val_A', 'Val_B'])
len(g)
# Out
3
答案 3 :(得分:1)
尝试一下:
df.drop_duplicates().groupby('Date').Val_A.count().reset_index(name='Val_x')
Out[1996]:
Date Val_x
0 1/2/18 3