如何使用 iterrows() 进行迭代并检查子集
how to iterate using iterrows() and check for a subset
我会在包含元组所有元素的数据框中找到行,然后在特定列中为该行的相应索引设置一个值
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))
有人有什么建议吗?
感谢您的帮助
使用列表理解例如随机生成的数据:
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
使用enumerate
和iloc
。
for idx, row in enumerate(df.astype(str).values.tolist()):
if set(tuple).issubset(row):
df.iloc[idx, df.columns.get_loc('label')] = 1
我会在包含元组所有元素的数据框中找到行,然后在特定列中为该行的相应索引设置一个值
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))
有人有什么建议吗?
感谢您的帮助
使用列表理解例如随机生成的数据:
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
使用enumerate
和iloc
。
for idx, row in enumerate(df.astype(str).values.tolist()):
if set(tuple).issubset(row):
df.iloc[idx, df.columns.get_loc('label')] = 1