Python 在dataframe中使用多类别列计算行数的有效方法?
我有一个带有headPython 在dataframe中使用多类别列计算行数的有效方法?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有headuid、col1、col2的数据帧,其中col1具有k1唯一值(例如a、b、c),col2具有k2唯一值(例如“低”、“高”)。按uid分组后,如果我想计算被col1=='a'的数量,我会这样做 df.groupby("uid")['col1'].apply(lambda group: sum(group=='a')).reset_index(name="a_cnt") 如果我想计算被col1=='a'和col2='low'的数量,我会这样做 df.groupby("uid
uid、col1、col2
的数据帧,其中col1
具有k1
唯一值(例如a、b、c
),col2
具有k2
唯一值(例如“低”、“高”)。按uid
分组后,如果我想计算被col1=='a'
的数量,我会这样做
df.groupby("uid")['col1'].apply(lambda group: sum(group=='a')).reset_index(name="a_cnt")
如果我想计算被col1=='a'和col2='low'
的数量,我会这样做
df.groupby("uid")['col1', 'col2'].apply(lambda group: sum((group['col1']=='a') & (group['col2']=='low'))).reset_index(name="a_low_cnt")
是否有其他有效的方法可以做到这一点?创建
掩码
,添加到数据框中,使用“按转换为数字”和“最后一次聚合”求和
,以提高性能:
#first mask
#m = (df['col1']=='a')
#second mask
m = (df['col1']=='a') & (df['col2']=='low')
df = df.assign(new = m.astype(int)).groupby("uid")['new'].sum()
或:
创建
掩码
,使用convert to numbers by和last aggregatesum添加到数据帧,以提高性能:
#first mask
#m = (df['col1']=='a')
#second mask
m = (df['col1']=='a') & (df['col2']=='low')
df = df.assign(new = m.astype(int)).groupby("uid")['new'].sum()
或:
谢谢在代码的第二部分中,我应该使用df.groupby('uid')['col1','col2']
还是df.groupby('uid')['col1','col2']]
?它们都给出了相同的结果,有什么不同吗?谢谢。在我的代码的第二部分中,我应该使用df.groupby('uid')['col1','col2']
还是df.groupby('uid')['col1','col2']]]
?它们都给我相同的结果,有什么区别吗?