如何根据数组列的值删除熊猫行?

联谊会

我在熊猫中有以下数据框:

     id              name categoryids    shops
5   239         Boulanger         [5]      152
3   196  Bouygues Telecom         [5]      500
4   122             Darty       [5,3]      363
1   311     Electro Dépôt         [5]       81
0  2336            Orange        [15]      578
2   194            Orange         [5]      577

我想删除第 5 行,因为它在名称上重复,但在categoryids具有不同的值,但由于这些值是数组(因为它们可以有多个值),我在比较它们时遇到问题。

我的想法是检查此列的模式并丢弃其数组中没有此值的所有行(例如,在这种情况下,模式将为 5,因此应丢弃第 5 列,因为此值不是存在于其数组中),但我在计算此值时遇到问题,因为该列是一个数组,而不是单个值。

关于如何做到这一点的任何想法或建议?

我正在使用 python 3.7 和最新版本的熊猫。

谢谢你。

VnC

使用这样的 DataFrame:

df = pd.DataFrame({'id': [239,196,122,311,2336,194,],
'name': ['Boulanger','Bouygues Telecom','Darty','Electro Dépôt','Orange','Orange',],
'shops': [152, 500, 363, 81, 578, 577,],
'categoryids': [[5],[5],[5,3],[5],[15],[5],]})

你可以做:

df.sort_values('categoryids').drop_duplicates('name', keep='first')

它对categoryids列进行排序,然后将重复项放入name并保留其中的第一个。

编辑:

您可以做的另一件事是检查categoryids列中您所追求的值是否存在:

df["exist"] = [int(5 in r)  for r in df["categoryids"]]

这会给你:

    id              name                shops   categoryids exist
0   239             Boulanger             152            [5]    1
1   196             Bouygues Telecom      500            [5]    1
2   122             Darty                 363         [5, 3]    1
3   311             Electro Dépôt          81            [5]    1
4   2336            Orange                578           [15]    0
5   194             Orange                577            [5]    1

然后你只能取那些存在的:

df[df['exist'] == 1]

然后使用pd.duplicated()@Erfan 提到的方法找到重复项

df['dups'] = df['name'].duplicated(keep=False).astype(int)


    id  name               shops     categoryids    exist   dups
0   239 Boulanger            152             [5]    1          0
1   196 Bouygues Telecom     500             [5]    1          0
2   122 Darty                363          [5, 3]    1          0
3   311 Electro Dépôt         81             [5]    1          0
4   2336    Orange           578            [15]    0          1
5   194 Orange               577             [5]    1          1


df[(
    (df['dups']!=1) | 
    (df['exist']!=0)
)].drop(['exist', 'dups'], axis=1).reset_index()

会导致:

index   id  name               shops    categoryids
0   0   239 Boulanger            152    [5]
1   1   196 Bouygues Telecom     500    [5]
2   2   122 Darty                363    [5, 3]
3   3   311 Electro Dépôt         81    [5]
4   5   194 Orange               577    [5]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据重复的列值删除行/条目

来自分类Dev

根据列中的值范围删除行

来自分类Dev

熊猫-Python,根据“日期”列删除行

来自分类Dev

根据列值在熊猫数据框中删除行

来自分类Dev

根据列中的值删除行对

来自分类Dev

熊猫-根据列删除重复的行

来自分类Dev

熊猫:根据最后一行中的值删除列

来自分类Dev

熊猫:根据多列值删除行

来自分类Dev

熊猫,根据其他列的值删除重复的行

来自分类Dev

熊猫:根据行值删除重复项

来自分类Dev

根据列值删除组后的行

来自分类Dev

如何通过删除从同一行检索到的值来转换数组的熊猫列

来自分类Dev

熊猫:根据列值扩展行

来自分类Dev

如何根据大熊猫中一列的条件删除行?

来自分类Dev

根据列中的值从熊猫数据框中删除行

来自分类Dev

熊猫根据重复的行获取列值

来自分类Dev

您如何根据多个列的条件汇总熊猫中的行并删除重复项?

来自分类Dev

根据特定的列值在熊猫中删除半重复行

来自分类Dev

根据值删除特定列中的行

来自分类Dev

如何根据出现次数最少的列值删除行

来自分类Dev

根据列值删除行

来自分类Dev

根据特定列的值删除行

来自分类Dev

使用熊猫删除基于行的列的值

来自分类Dev

jQuery:如何根据列值删除重复的HTML TABLE行

来自分类Dev

熊猫:根据最后一行中的值删除列

来自分类Dev

如何根据空白列值VB删除行

来自分类Dev

根据所有列的值有条件地删除熊猫中的行

来自分类Dev

scala 如何根据列值从 df 中删除行

来自分类Dev

根据行值删除列