gpt4 book ai didi

python - Pandas:如何打印 groupby 值

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:28 25 4
gpt4 key购买 nike

我有来自 Table_Record 的以下数据集:

Seg_ID  Lock_ID  Code
111 100 1
222 121 2
333 341 2
444 100 1
555 100 1
666 341 2
777 554 4
888 332 5

我正在使用 sql 查询来查找重复 Lock_IDSeg_IDs:

Select Code,Lock_ID,Seg_ID from Table_Record group by Code, Lock_ID;

Seg_ID Lock_ID Code
111 100 1
444 100 1
555 100 1
222 121 2
333 341 2
666 341 2
777 554 4
888 332 5

如何使用 Pandas 实现同样的效果?

Excepted O/P from Pandas is:

例如。

Seg_ID (111,444,555) has Lock_id (1).
Seg_ID (222,333,666) has Lock_ID (2).

最佳答案

首先通过只过滤duplicated得到所有的codes值,然后按 boolean indexing 过滤原始 DaatFrameisin :

codes = df.loc[df.duplicated(['Lock_ID']), 'Code'].unique()

df1 = df[df['Code'].isin(codes)]
print (df1)
Seg_ID Lock_ID Code
0 111 100 1
1 222 121 2
2 333 341 2
3 444 100 1
4 555 100 1
5 666 341 2

然后 groupby使用 f-strings:

for k, v in df1.groupby(['Code'])['Seg_ID']:
print (f'Seg_ID {tuple(v)} has Code ({k})')

Seg_ID (111, 444, 555) has Code (1)
Seg_ID (222, 333, 666) has Code (2)

如果想要像 DataFrame 这样的输出,请使用 applytuple:

df2 = df1.groupby(['Code'])['Seg_ID'].apply(tuple).reset_index()
print (df2)
Code Seg_ID
0 1 (111, 444, 555)
1 2 (222, 333, 666)

关于python - Pandas:如何打印 groupby 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52715706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com