gpt4 book ai didi

python - 在 Pandas 数据框中查找具有相同值的行

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:04 24 4
gpt4 key购买 nike

我目前有一个包含超过 1,0000 行和 600 列的大型数据框。该表在左侧按标识索引,每一列都是一个位置。网格中每个点的值要么是 0 要么是 1。我希望能够通过确定哪些在其行中具有相同的 0 和 1 模式来找出和分组标识。

例如:

print df.table
ID#1 0 1 0 1 0 0 1 0 1
ID#2 0 0 1 0 1 0 1 0 1
ID#3 1 0 0 0 1 0 1 1 0
ID#4 0 1 0 1 0 0 1 0 1
ID#5 1 0 0 0 1 0 1 1 0
ID#6 0 0 1 0 1 0 1 0 1

df.table.'GROUP' returns

[(ID#1,ID#4), (ID#2,ID#6), (ID#3,ID#5)]

最佳答案

In [39]: data = """ID#1   0 1 0 1 0 0 1 0 1
ID#2 0 0 1 0 1 0 1 0 1
ID#3 1 0 0 0 1 0 1 1 0
ID#4 0 1 0 1 0 0 1 0 1
ID#5 1 0 0 0 1 0 1 1 0
ID#6 0 0 1 0 1 0 1 0 1
"""

In [40]: df = read_csv(StringIO(data),header=None,sep='\s+',index_col=0)

In [41]: df['compressed'] = df.apply(lambda x: ''.join([ str(v) for v in x ]),1)

In [42]: df
Out[42]:
1 2 3 4 5 6 7 8 9 compressed
0
ID#1 0 1 0 1 0 0 1 0 1 010100101
ID#2 0 0 1 0 1 0 1 0 1 001010101
ID#3 1 0 0 0 1 0 1 1 0 100010110
ID#4 0 1 0 1 0 0 1 0 1 010100101
ID#5 1 0 0 0 1 0 1 1 0 100010110
ID#6 0 0 1 0 1 0 1 0 1 001010101

In [43]: df.groupby('compressed').apply(lambda x: x.index.tolist())
Out[43]:
compressed
001010101 [ID#2, ID#6]
010100101 [ID#1, ID#4]
100010110 [ID#3, ID#5]
dtype: object

这里还有 2 个你可以做的 reshape (在你添加 'compressed' 列之前做这个)

创建一个 Series,其值是 1 个位置的元组

In [45]: pd.concat([ Series([ tuple(x[x.astype(bool)].index.tolist()) ], index=[row]) for (row,x) in df.iterrows() ])
Out[45]:
ID#1 (2, 4, 7, 9)
ID#2 (3, 5, 7, 9)
ID#3 (1, 5, 7, 8)
ID#4 (2, 4, 7, 9)
ID#5 (1, 5, 7, 8)
ID#6 (3, 5, 7, 9)
dtype: object

创建一个框架,每个位置都有一列

In [46]: DataFrame(dict([ (row,x[x.astype(bool)].index.tolist()) for (row,x) in df.iterrows() ])).T
Out[46]:
0 1 2 3
ID#1 2 4 7 9
ID#2 3 5 7 9
ID#3 1 5 7 8
ID#4 2 4 7 9
ID#5 1 5 7 8
ID#6 3 5 7 9

关于python - 在 Pandas 数据框中查找具有相同值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17836105/

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