根据Pandas中其他列的值删除重复项

omqzjyyz  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(157)

我试图删除列duplicates中的重复项,只保留列name中的值等于“foo”的记录。有没有比我的方法更好的方法?

import pandas as pd

df = pd.DataFrame(
    {"name": ["foo", "bar", "foo", "baz"], "duplicates": ["qux", "qux", "fred", "fred"]}
)
df["name"] = df["name"].map({"foo": "a"})
df.sort_values(["name", "duplicates"], inplace=True, ascending=True)
df.drop_duplicates("duplicates")
uajslkp6

uajslkp61#

如果不匹配foo,如果duplicates的每个组不存在,您的解决方案中还需要值,对吗?
然后,解决方案是将DataFrameGroupBy.idxmax用于每组的第一个True,msk用于比较foo-如果不存在,则获取第一个False值:

df = pd.DataFrame(
    {"name": ["foo", "bar", "foo", "baz","bez"], 
     "duplicates": ["qux", "qux", "fred", "fred","John"]}
)
print (df)
  name duplicates
0  foo        qux
1  bar        qux
2  foo       fred
3  baz       fred
4  bez       John

df = df.loc[df["name"].eq('foo').groupby(df['duplicates']).idxmax()]

print (df)
  name duplicates
4  bez       John
2  foo       fred
0  foo        qux
093gszye

093gszye2#

IIUC,你原来的df是

import pandas as pd

df = pd.DataFrame(
    {"name": ["foo", "bar", "foo", "baz"], "duplicates": ["qux", "qux", "fred", "fred"]}
)

输出为
| | 姓名|重复|
| - ------|- ------|- ------|
| 无|富|古克斯|
| 1个|棒|古克斯|
| 第二章|富|弗雷德|
| 三个|巴兹|弗雷德|
这个怎么样?

df[
    df['duplicates']\
        .isin(df.groupby('duplicates')\
                .size()\
                .reset_index(name='count')\
                .query('count>1')['duplicates']
            )
    ].query('name=="foo"')

所以你会得到
| | 姓名|重复|
| - ------|- ------|- ------|
| 无|富|古克斯|
| 第二章|富|弗雷德|

相关问题