我有一个熊猫数据框,列为“a”和“b”。列a有一个值列表作为列值,列“b”有一个列表,其中有一个值可能出现在列“a”中。我想基于列a和b创建一个新的列c,该列的值为元素在b中的位置,该位置出现在列a的值中,使用apply。(c:(a中b的索引)+1) 列b总是一个包含一个元素或根本没有元素的列表,列a可以是任意长度的,但是如果它是空的,列b也将是空的。列b元素应该在列a中,我只想找到它在列a中第一次出现的位置
a b c
['1', '2', '5'] ['2'] 2
['2','3','4'] ['4'] 3
['2','3','4'] [] 0
[] [] 0
...
我写了一个for循环,它工作得很好,但是速度很慢:
for i in range(0,len(df)):
if len(df['a'][i])!=0:
df['c'][i]=df['a'][i].index(*df['b'][i])+1
else:
df['c'][i]=0
但我想用apply使它更快,以下不工作,任何想法或建议将不胜感激?你知道吗
df['c']=df['a'].apply(df['a'].index(*df['b']))
通过读入数据,使数据类型成为列表,我能够创建一个apply函数,该函数为c创建值:
首先,这里是一个使用
.apply()
的基本方法。你知道吗df_1
结果:我用
NaN
替换了空列表,我发现它更加习惯和实用。你知道吗这显然不是一个理想的解决方案,我会努力找到别的办法。显然,我们对你的程序和数据帧的了解越多越好。你知道吗
相关问题 更多 >
编程相关推荐