我想在条件列名“ Group”等于“ Group 1”值的情况下对三列(输入文件名,页码,顶部)应用groupby方法,并保持其余值不变。请参考图片以便更好地理解。
pleasse find the dataset image here
下面是我尝试过的代码
df是我的整个数据集
df[df['Group'].apply(lambda x:x=='Group 1')].groupby(['Input File Name','Page Number','Top'], as_index=False).agg(lambda x: list(x))
如果使用上面的代码,则适用于组1的值,而忽略其余的值。所以我尝试了另一种方式:
df.apply(lambda x: x.groupby(['Input File Name','Page Number','Top'], as_index=False).agg(lambda x: list(x)) if x['Group']=='Group 1' else x)
因此,我得到KeyError:('Group','发生在索引输入文件名']
此方法可行吗?
如何执行两个步骤:
== Group1
时过滤类似:
df_group1 = df[df['Group'] == 'Group1'].groupby(['Input File Name','Page Number','Top'], as_index=False).agg(lambda x: list(x))
df_rest = df[df['Group'] != 'Group1']
但是使用pd.concat
合并这些将需要更多信息。例如:新的agg
将是一个新列表? None
其他组发生了什么?
没有确切的期望输出,我无法帮助您。