【发布时间】:2019-10-24 03:40:14
【问题描述】:
我试图自动查找而不使用列表项的索引,该列表项包含在每行的特定熊猫列中。
想象一下,我有一个包含 names = ["U9", "Z9", "H10"] 的列表和一个带有包含以下内容的列的 pandas 数据框
dat['col1'] = ["U9", "U9", "U9", "Z9", "Z9", "H10", "H10", "H10", "H10", "H10"]
我正在尝试将第一个代码替换为从 mask 开始的第二个代码,但出现以下错误。
for i in range(len(dat)):
index = names.index(dat['col1'][i])
if index < len(names)-1:
dat.loc[i, 'col2'] = names[index + 1]
else:
break
mask = []
for i in range(len(dat)):
mask.append(names.index(dat['col1'][i]) < len(names) - 1)
dat['col2'] = np.where(mask, names[names.index(dat['col1'])+1], np.NaN)
我得到的错误是
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
这是因为names[names.index(dat['col1'])+1] 没有对dat['col1'] 中的每一行进行迭代。
所以我想要的是在不使用下面提到的 for 的情况下遍历 pandas 中的行,并将 dat['col1'] 的值分配给 dat['col2'],但进行了转移。预期的结果应该是这样的
dat['col2'] = ["Z9", "Z9", "Z9", "H10", "H10", nan, nan, nan, nan, nan]
【问题讨论】:
标签: python pandas list indexing