我正在尝试使用一个单元格的值在另一列中查找一个单元格的值。第一个单元格值指示要查找的列。
import pandas as pd
df = pd.DataFrame({'A': ['John', 'Andrew', 'Bob', 'Fred'], 'B': [
'Fred', 'Simon', 'Andrew', 'Andrew'], 'source': ['A', 'B', 'A', 'B']}, )
print(df)
A B source
0 John Fred A
1 Andrew Simon B
2 Bob Andrew A
3 Fred Andrew B
我在“输出”列中所需的输出值是对“源”的查找
A B source output
0 John Fred A John
1 Andrew Simon B Simon
2 Bob Andrew A Bob
3 Fred Andrew B Andrew
尝试失败
df['output'] = df[df['source']]
这将导致ValueError:传递的项目数错误4,放置位置隐含1,因为df['source']
传递的是Series,而不是字符串。我尝试使用以下方式转换为字符串:
df['output'] = df[df['source'].convertDTypes(convert_string=True)]
它给出了错误AttributeError:'Series'对象没有属性'convertDTypes'。
工作方案
我发现一种解决方案可能是通过使用以下方法遍历各行:
for index, row in df.iterrows():
column = df.loc[index, 'source']
df.at[index, 'output'] = df.loc[index, column]
但是,这篇文章表明迭代是一个坏主意。该代码也不是很优雅。
我觉得我在这里错过了一些基本的东西;这确实不应该那么难。
让我们做些吧,numpy
因为lookup
在以后的版本中将不再起作用
df['new'] = df.values[df.index,df.columns.get_indexer(df.source)]
df
Out[339]:
A B source new
0 John Fred A John
1 Andrew Simon B Simon
2 Bob Andrew A Bob
3 Fred Andrew B Andrew
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句