在具有 2 列的資料框中[id][string],我需要根據列的值知道哪些行與哪些行重復[string]。我的資料框有數千行,但只有 2 列。
輸入資料框的示例:
id,string
0,"A B C D"
1,"D B C D E Z"
2,"A B C D"
3,"Z Z Z Z Z Z Z Z Z Z Z Z"
4,"D B C D E Z"
5,"A B C D"
在此示例中,第 0、2、5 行彼此重復。第 1行和第 4行也是彼此重復的。(id 是唯一的)
我想要以下輸出:
[["0","2","5"]],["1","4"]]
uj5u.com熱心網友回復:
我會使用 groupby 和 listcomp。
>>> df
id string
0 0 A B C D
1 1 D B C D E Z
2 2 A B C D
3 3 Z Z Z Z Z Z Z Z Z Z Z Z
4 4 D B C D E Z
5 5 A B C D
>>>
>>> [l for l in df.groupby('string')['id'].apply(list) if len(l) > 1]
[[0, 2, 5], [1, 4]]
如果您真的想要結果中的字串,請使用
>>> [[str(x) for x in l] for l in df.groupby('string')['id'].apply(list) if len(l) > 1]
[['0', '2', '5'], ['1', '4']]
uj5u.com熱心網友回復:
您可以在聚合后list按串列長度過濾:stringboolean indexingSeries.str.len
s = df.assign(id = df['id'].astype(str)).groupby('string')['id'].apply(list)
out = s[s.str.len().gt(1)].tolist()
如果已經id是字串:
s = df.groupby('string')['id'].apply(list)
out = s[s.str.len().gt(1)].tolist()
uj5u.com熱心網友回復:
另一種選擇是使用duplicated:
>>> df[df.duplicated('string',False)].groupby('string')['id'].apply(lambda x: x.astype(str).tolist()).tolist()
# [['0', '2', '5'], ['1', '4']]
如果不需要更改“id”型別:
>>> df[df.duplicated('string',False)].groupby('string')['id'].apply(list).tolist()
# [[0, 2, 5], [1, 4]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478068.html
標籤:Python python-3.x 熊猫 数据框
上一篇:PythonAltair,`mark_line()`,_ignore_NaN而不是_skipping_它們或將它們視為0?
