Pandas获取值与特定行匹配的所有行

vktxenjb  于 2023-03-16  发布在  其他
关注(0)|答案(4)|浏览(467)

所以我有这个代码

unique_values = df.drop_duplicates(keep=False)

for _, row in unique_values.iterrows():
    mask = (df == row).all(axis=1)
    df_subset = df[mask]

所以上面的代码应该找到 Dataframe 中所有唯一的行,然后找到原始 Dataframe 中所有匹配这些值的行。不管什么原因,上面的代码df_subset只返回一行 Dataframe ,即使原始 Dataframe 中有多行匹配row。我如何得到Pandas行中所有具有特定列值的行?
例如,如果我有row=[0,01]和一个类似于[[0,0,1],[2,2,0],[0,0,1],[0,0,1],[0,0,1]]的 Dataframe ,它应该返回索引0,2,3,4。

bihw5rsg

bihw5rsg1#

IIUC,您可以用途:

>>> df[df.eq(row).all(axis=1)].index.tolist()
[0, 2, 3, 4]

详情:

>>> pd.concat([df, (m := df.eq(row)), m.all(axis=1)],
              keys=['df', 'mask', 'all'], axis=1)

  df         mask                  all
   0  1  2      0      1      2      0
0  0  0  1   True   True   True   True
1  2  2  0  False  False  False  False
2  0  0  1   True   True   True   True
3  0  0  1   True   True   True   True
4  0  0  1   True   True   True   True

输入 Dataframe :

>>> df
   0  1  2
0  0  0  1
1  2  2  0
2  0  0  1
3  0  0  1
4  0  0  1

>>> row
[0, 0, 1]
34gzjxbg

34gzjxbg2#

基于numpy broadcasting的另一种可能的解决方案是:

row = np.array([0,0,1])
np.flatnonzero((row == df.values[:, None]).all(axis = 2)).tolist()

输出:

[0, 2, 3, 4]
0h4hbjxa

0h4hbjxa3#

您可以使用isin Pandas方法

rows=[0,1]
mask=df.isin(rows)
df_sub=df[mask.all(axis=1)]
print(df_sub.index.tolist())
gkl3eglg

gkl3eglg4#

您可以对所有列唯一值尝试此操作

df.groupby([{all column}]).apply(lambda x : list(x.index))

相关问题