Groupby - 具有重复值的熊猫 df 计数
Posted
技术标签:
【中文标题】Groupby - 具有重复值的熊猫 df 计数【英文标题】:Groupby - count of pandas df with duplicate values 【发布时间】:2019-10-13 11:39:48 【问题描述】:我正在尝试使用重复值执行熊猫df
的groupby
count
。我希望只返回不重复的值。对于预期的输出,我只想确定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
【问题讨论】:
你能解释一下你是如何得到你想要的输出的逻辑吗?您是否在计算每列每个日期的唯一值? @Erfan,每列有6个与指定日期相关的值。但是,当对Val_A
和Val_B
进行分组时,只有 3 个独立值。如,非重复值。
【参考方案1】:
删除重复项并将 Val_B 作为值传递,
pd.pivot_table(df.drop_duplicates(), index=['Date'],values=['Val_B'],aggfunc= 'count')
Val_B
Date
1/2/18 3
【讨论】:
【参考方案2】:原则上,你可以通过
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
【讨论】:
这工作@Gwang-Jin Kim。我想我想多了。我可以删除不需要的列并重命名剩余的列【参考方案3】:如果我对您的理解正确,您希望为Date
中的每个组返回Val_A
和Val_B
列中的唯一组合:
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
【讨论】:
【参考方案4】:试试这个:
df.drop_duplicates().groupby('Date').Val_A.count().reset_index(name='Val_x')
Out[1996]:
Date Val_x
0 1/2/18 3
【讨论】:
以上是关于Groupby - 具有重复值的熊猫 df 计数的主要内容,如果未能解决你的问题,请参考以下文章
熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]