Groupby Pandas数据框为某些列保留唯一值并列出其他列

t98cgbkg  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(190)

我想将以下输出按Material_id进行分组,保留MATERIAL_DESCRIPTION和MPN的唯一值,但列出PLANT_ID。picture for reference

def search_output(materials):
 df=pd.DataFrame(materials)
 df_ref = df.loc[:, df.columns!='@search.score'].groupby('material_id').agg({lambda 
 x:list(x)})
 return df_ref

这当前按Material_id分组并列出其他列。

下面的代码我用来保持唯一的值按材质_id分组,但是现在我缺少PLANT_ID LIST列。

df_t = df.loc[:, df.columns!='@search.score'].groupby('material_id' ['material_description','MPN'].agg(['unique'])

picture for reference#2

我正在寻找一种将两者结合起来的方法。一种按列分组、保留特定列的唯一值并同时列出其他列的方法。

希望您能帮上忙--对图片表示歉意,但想不出如何添加输出:)

bnl4lu3b

bnl4lu3b1#

您可以按列表创建词典-首先按unique聚合,然后按listdict.fromkeys创建其他所有列,并将它们连接到GroupBy.agg

print (df)
   material_id material_description MPN  A  B
0            1               descr1   a  b  c
1            1               descr2   a  d  e
2            1               descr1   b  b  c
3            2               descr3   a  b  c
4            2               descr4   a  b  c
5            2               descr4   a  b  c

u_cols = ['material_description','MPN']
d = {c: 'unique' if c in u_cols else list for c in df.columns.drop('material_id')}

df_ref = df.loc[:, df.columns!='@search.score'].groupby('material_id').agg(d)
print (df_ref)
            material_description     MPN          A          B
material_id                                                   
1               [descr1, descr2]  [a, b]  [b, d, b]  [c, e, c]
2               [descr3, descr4]     [a]  [b, b, b]  [c, c, c]

相关问题