如何使用函数提取Dataframe中的行



我的数据帧包括列表,如下所示。

a        b
1     frog   [1, 2, 3]
2      dog   [4, 5]
3    melon   [6, 7, 1]

我想提取b包含特定数字的行,所以我做了这个函数。

def a(_list, _tag):
if _tag in _list:
return True
else:
return False

我尝试使用df.loc[],但效果不好。如何在不迭代所有数据帧的情况下编写代码?

我的预期输出是这样的。如果我想在b中找到包含"1"的行,输出将是

a      b
1    frog   [1, 2, 3]
3   melon   [6, 7, 1]

这里有一种方法可以满足您的问题:

target = 1
df2 = df.explode('b').b == target
df['found'] = df2.groupby(df2.index).sum() > 0
print(df)

输出:

a          b  found
0   frog  [1, 2, 3]   True
1    dog     [4, 5]  False
2  melon  [6, 7, 1]   True

您的a函数可以简化为

def a(_list, _tag):
return _tag in _list

您可以在Series.apply中使用它

out = df['b'].apply(lambda _list: a(_list, _tag))
# or
out = df['b'].apply(lambda _list: _tag in _list)

您可以尝试这个简单的pandasoneliner:

df[df.explode('B').eq(1).groupby(df.explode('B').A, sort=False).sum().B.apply(bool).values]

输出:

A          B
0   frog  [1, 2, 3]
2  melon  [6, 7, 1]

使用.explode.loc来获得相关的唯一索引,然后使用.iloc:进行查询

df.iloc[df.explode("b").loc[df["b"].isin(target_hash_set)].index.unique()]

最新更新