在对象dtype上使用Pandas DataFrame.apply:创建新列而不影响已使用的列

时间:2018-07-15 12:04:34

标签: python pandas dataframe

我想通过在列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保持原始状态。谁能告诉我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

您要在列A上使用Apply

df['B'] = df['A'].apply(function)

这会对A中的每个值执行功能。

基本上,您正在使用系列对象的apply方法,更多信息:

pandas.Series.apply

答案 1 :(得分:0)

df2 = df.copy()
df['B'] = df2.apply(lamba row: function(row['A']), axis=1)