熊猫合并并完成相同ID的行

发布于 2025-01-30 06:27:44 字数 2181 浏览 4 评论 0原文

Here is an extract of my dataframe :

IDLUMAMEJEVESADI
200BBB
201CCCCC
211A
211DDD
211B
213AA
216KKKK
216K
217BBBBB

我有一些与相同的id的行,并希望在完成它们时将它们“合并”到一行中。 Here is an example of what I want to have as a result :

IDLUMAMEJEVESADI
200BBB
201CCCCC
211ADDDB
213AA
216KKKKK
217BBBBB

我是Pandas DataFrames的新手,并且尝试使用drop_duplicates方法,但是我需要一些不同的东西,因为keep> keep参数的限制。 同样,数据帧由ID排序。

Here is an extract of my dataframe :

IDLUMAMEJEVESADI
200BBB
201CCCCC
211A
211DDD
211B
213AA
216KKKK
216K
217BBBBB

I have some rows with same ID and want to "merge" them into only one row while completing them.
Here is an example of what I want to have as a result :

IDLUMAMEJEVESADI
200BBB
201CCCCC
211ADDDB
213AA
216KKKKK
217BBBBB

I'm new to pandas dataframes and have try to use drop_duplicates method but I need something different because of the restriction on keep parameters.
Also the dataframe is sorted by ID.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蝶…霜飞 2025-02-06 06:27:44

如果每个组只有一个非空值使用:

df = df.replace('',np.nan).groupby('ID', as_index=False).first().fillna('')

如果可能的多个值,并且需要在原始顺序中使用唯一值,则使用lambda函数:

print (df)
    ID LU MA ME JE VE SA DI
0  201  B     C  B         
1  201  C  C  C  B  C    


f = lambda x: ','.join(dict.fromkeys(x.dropna()).keys())
df = df.replace('',np.nan).groupby('ID', as_index=False).agg(f)
print (df)
    ID   LU MA ME JE VE SA DI
0  201  B,C  C  C  B  C      

If there is only one non empty value per groups use:

df = df.replace('',np.nan).groupby('ID', as_index=False).first().fillna('')

If possible multiple values and need unique values in original order use lambda function:

print (df)
    ID LU MA ME JE VE SA DI
0  201  B     C  B         
1  201  C  C  C  B  C    


f = lambda x: ','.join(dict.fromkeys(x.dropna()).keys())
df = df.replace('',np.nan).groupby('ID', as_index=False).agg(f)
print (df)
    ID   LU MA ME JE VE SA DI
0  201  B,C  C  C  B  C      
攀登最高峰 2025-02-06 06:27:44

这可以视为枢轴。您需要先融化DF然后旋转:

(df.melt(id_vars='ID')
   .dropna()
   .pivot(index='ID',columns='variable',values='value')
   .fillna('')
   .rename_axis(None, axis=1)
   .reset_index()
)

This could be treated as a pivot. You'd need to melt the df first then pivot:

(df.melt(id_vars='ID')
   .dropna()
   .pivot(index='ID',columns='variable',values='value')
   .fillna('')
   .rename_axis(None, axis=1)
   .reset_index()
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文