如何使用iterrows()进行迭代并检查子集

2024-05-11 03:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我会在包含元组所有元素的数据框中找到行,然后在特定列中为行的对应索引设置一个值

for ix, row in df.iterrows():
    if set(tuple).issubset(row):
      df.loc[ix, ['label']] = 1

但我得到了这个错误:

TypeError: unhashable type: 'list'

如果我执行以下代码块,它似乎可以工作,但我不知道如何在标签列中设置行与元组匹配的值

for row in df.astype(str).values.tolist():
  set(tuple).issubset(row))

有人有什么建议吗

谢谢你的帮助


Tags: 数据in元素dfforiflocrow
2条回答

使用enumerateiloc

for idx, row in enumerate(df.astype(str).values.tolist()):
    if set(tuple).issubset(row):
        df.iloc[idx, df.columns.get_loc('label')] = 1

使用列表理解,例如随机生成的数据:

import pandas as pd
import numpy as np

np.random.seed(2)

tuples = list(zip(np.random.randint(0, 5, 10), np.random.randint(
    10, 15, 10), np.random.randint(20, 30, 10)))

data = pd.DataFrame(dict(tups=tuples))

data.head()

#   tups
# 0 (0, 14, 23)
# 1 (0, 14, 25)
# 2 (3, 14, 28)

然后可以设置label从列表comphrension生成值

tuple_subset = (0, 14)
data['Label'] = [1 if set(tuple_subset).issubset(x)
                 else None for x in data.tups]

data.head(3)

#   tups        Label
# 0 (0, 14, 23) 1.0
# 1 (0, 14, 25) 1.0
# 2 (3, 14, 28) NaN

相关问题 更多 >