我想通过在列A的每一行上应用一个函数来创建新列B,该列是数据类型的对象,并填充有 list 数据,而没有在数据帧DF 中更改A列的值。
def f(i):
if(type(i) is list):
for j in range(0,len(i)):
i[j]+=1
else:
i+=1
return i
df = pd.DataFrame([1,1],columns=['A'])
df['A']=df['A'].astype(object)
df.at[[0,1],'A']=[1,2]
df['B']=df['A'].apply(lambda x: f(x))
不幸的是,发生了以下情况:df ['B'] = function(df ['A']),但df ['A'] = function(df ['A'])。
请注意:df ['A']是列表,dtype是对象(o)。
要清楚:我希望列A保持原始状态。谁能告诉我如何实现这一目标?
答案 0 :(得分:1)
您要在列A
上使用Apply
df['B'] = df['A'].apply(function)
这会对A
中的每个值执行功能。
基本上,您正在使用系列对象的apply方法,更多信息:
答案 1 :(得分:0)
df2 = df.copy()
df['B'] = df2.apply(lamba row: function(row['A']), axis=1)