熊猫只选择行,其中列中的唯一字符串只有另一列中的一个特定字符串

时间:2019-01-31 15:18:09

标签: python python-3.x pandas

我有3列的pandas数据框:

df = pd.DataFrame({'DEST_NAME':['A','A','B','B','C','D','E','E','F'],
                   'ID':['4624','4625','4624','4625','4625','4625','4624','4625','4625'],
                   'COUNT':[203,202,100,23,2,200,203,2022,201]})

    DEST_NAME   ID      COUNT
0   A           4624    203
1   A           4625    202
2   B           4624    100
3   B           4625    23
4   C           4625    2
5   D           4625    200
6   E           4624    203
7   E           4625    2022
8   F           4625    201
9   D           4625    125
10  D           4625    122
11  C           4625    3

我尝试获取其中DEST_NAME仅具有ID的{​​{1}}而不是4625的行。因此,如果4624在列DEST_NAME中同时具有46244625条目,则基本上排除在外。因此结果将如下所示:

ID

5 个答案:

答案 0 :(得分:3)

您可以提取范围内和范围外的DEST_NAME。然后使用pd.Series.isin并结合您的两个条件:

ids_inc = df.loc[df['ID'] == '4625', 'DEST_NAME']
ids_exc = df.loc[df['ID'] == '4624', 'DEST_NAME']

res = df[df['DEST_NAME'].isin(ids_inc) & ~df['DEST_NAME'].isin(ids_exc)]

print(res)

   COUNT DEST_NAME    ID
4      2         C  4625
5    200         D  4625
8    201         F  4625

答案 1 :(得分:2)

您可以检查哪些行包含ID4625 GroupBy的{​​{1}},以仅保留所有值为DEST_NAME的行。然后使用这些值对数据框执行布尔索引:

True

答案 2 :(得分:0)

尝试:

df_filtered = df[df['ID'] == '4625'].copy()

答案 3 :(得分:0)

df = pd.DataFrame({'DEST_NAME':['A','A','B','B','C','D','E','E','F'],
                   'ID':['4624','4625','4624','4625','4625','4625','4624','4625','4625'],
                   'COUNT':[203,202,100,23,2,200,203,2022,201]})

df2=df[df['ID']=='4625']

结果:

COUNT DEST_NAME    ID
1    202         A  4625
3     23         B  4625
4      2         C  4625
5    200         D  4625
7   2022         E  4625
8    201         F  4625

答案 4 :(得分:0)

我发现pandas.DataFrame.query方法是一种过滤数据的好方法。我想在您的情况下,它会给出:

df.query("ID == '4625' & ID != 4624")