背景
我想按rule_id和calc_id进行分组,并将多列转换为一行,其中每个变量都用“,'连接”
数据示例
Calc_ID Rule_ID Name Tracked?
100 Rule1 Y
100 Rule2 N
100 Rule3 N
YYY Test1 Y
YYY Test2 Y
YYY Test3 N
预期结果
Calc_ID Rule_ID Name Tracked?
100 Rule1, Rule2, Rule3 Y, N, N
YYY Test1, Test2, Test3 Y, Y, N
当前代码
我尝试一次对每一列应用一个分组,但这不起作用。
import pandas as pd
pd = read_csv(path)
pd = pd.fillna('') # <- to fix nans on groupby calc_id / rule_id
pd = pd.groupby(['Rule_ID', 'Calc_ID'])['Name'].apply(','.join).reset_index()
# pd = pd.groupby(['Rule_ID', 'Calc_ID'])['Tracked?'].apply(','.join).reset_index()
# ^ but this doesn't work because the initial groupby removes other columns
您应该使用
agg
来聚合每组中的值,而不是 apply
:
df = df.groupby(["Calc_ID", "Rule_ID"], as_index=False).agg(", ".join)
Calc_ID Rule_ID Name Tracked?
0 100 Rule1, Rule2, Rule3 Y, N, N
1 YYY Test1, Test2, Test3 Y, Y, N