求R中group_by+summarise分组统计逻辑的Python等价代码
R代码转Python等价实现
原R代码
DF %>% group_by(Group) %>% summarise( Var1 = mean(Option[Var_A == 1] == Option[Var_B == 1]) )
示例DataFrame(Python)
DF = pd.DataFrame.from_dict({ 'Group': {('No_1', 1): 'Group_A', ('No_1', 2): 'Group_A', ('No_1', 3): 'Group_A', ('No_1', 4): 'Group_A', ('No_1', 5): 'Group_A', ('No_1', 6): 'Group_A', ('No_1', 7): 'Group_A', ('No_1', 8): 'Group_A', ('No_24', 1): 'Group_B', ('No_24', 2): 'Group_B', ('No_24', 3): 'Group_B', ('No_24', 4): 'Group_B', ('No_24', 5): 'Group_B', ('No_24', 6): 'Group_B', ('No_24', 7): 'Group_B', ('No_24', 8): 'Group_B'}, 'Var_A': {('No_1', 1): 0, ('No_1', 2): 0, ('No_1', 3): 0, ('No_1', 4): 1, ('No_1', 5): 0, ('No_1', 6): 0, ('No_1', 7): 0, ('No_1', 8): 0, ('No_24', 1): 0, ('No_24', 2): 0, ('No_24', 3): 0, ('No_24', 4): 1, ('No_24', 5): 0, ('No_24', 6): 0, ('No_24', 7): 0, ('No_24', 8): 0}, 'Var_B': {('No_1', 1): 0, ('No_1', 2): 0, ('No_1', 3): 0, ('No_1', 4): 1, ('No_1', 5): 0, ('No_1', 6): 0, ('No_1', 7): 0, ('No_1', 8): 0, ('No_24', 1): 0, ('No_24', 2): 0, ('No_24', 3): 0, ('No_24', 4): 1, ('No_24', 5): 0, ('No_24', 6): 0, ('No_24', 7): 0, ('No_24', 8): 0}, 'Option': {('No_1', 1): 1, ('No_1', 2): 2, ('No_1', 3): 3, ('No_1', 4): 4, ('No_1', 5): 5, ('No_1', 6): 6, ('No_1', 7): 7, ('No_1', 8): 8, ('No_24', 1): 1, ('No_24', 2): 2, ('No_24', 3): 3, ('No_24', 4): 4, ('No_24', 5): 5, ('No_24', 6): 6, ('No_24', 7): 7, ('No_24', 8): 8} })
Python等价实现
逻辑说明
原R代码核心逻辑:按Group分组后,提取每组中Var_A == 1对应的Option值、Var_B == 1对应的Option值,比较二者是否相等,最终取该布尔结果的均值(因每组仅存在一个符合条件的Option值,均值等价于布尔值的数值化结果:相等为1,不等为0)。
代码实现
import pandas as pd result = DF.groupby('Group').apply( lambda group: (group.loc[group['Var_A'] == 1, 'Option'].iloc[0] == group.loc[group['Var_B'] == 1, 'Option'].iloc[0]) ).reset_index(name='Var1') # 查看结果 print(result)
输出结果
Group Var1 0 Group_A 1 1 Group_B 1
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

