我有类似这样的问题,但这个答案无法解决我的问题
Pandas: create two new columns in a dataframe with values calculated from a pre-existing column。
我有一个函数,它接受两个参数并在float
中返回两个不同的值。原始数据帧也在float
def FunctionName (a, b):
some calculations---
return x, y
我有df
,我想使用函数FunctionName
,这样我将从现有的df['A], df['B]
df['A], df['B]
df['A_new'], df['B_new'] = df[['A'], df['B']].apply(FunctionName)
给我一个错误
TypeError: unhashable type: 'list'
我也试过了
df['A_new'], df['B_new'] = FunctionName ( df['A'], df['B'])
给了我一个错误
TypeError: cannot convert the series to <class 'float'>
我想将返回X值用于df['A_new']
,将Y值用于df['B_new']
有人可以告诉我,我在这里缺少什么?
答案 0 :(得分:3)
我认为需要参数axis=1
到apply
对于具有lambda函数的行的进程来定义列bynames并为新列返回Series
- 由join
添加:
df = pd.DataFrame({'A':[4,5,4,5,5,4],
'B':[7,8,9,4,2,3],
'C':[1,3,5,7,1,0]})
print (df)
A B C
0 4 7 1
1 5 8 3
2 4 9 5
3 5 4 7
4 5 2 1
5 4 3 0
def FunctionName (a, b):
x = a * 5
y = b * 7
return pd.Series([x, y], index=['A_new','B_new'])
df = df.join(df.apply(lambda x: FunctionName(x['A'], x['B']), axis=1))
print (df)
A B C A_new B_new
0 4 7 1 20 49
1 5 8 3 25 56
2 4 9 5 20 63
3 5 4 7 25 28
4 5 2 1 25 14
5 4 3 0 20 21
def FunctionName (a, b):
x = a * 5
y = b * 7
return pd.Series([x, y])
df[['A_new', 'B_new']] = df.apply(lambda x: FunctionName(x['A'], x['B']), axis=1)
print (df)
A B C A_new B_new
0 4 7 1 20 49
1 5 8 3 25 56
2 4 9 5 20 63
3 5 4 7 25 28
4 5 2 1 25 14
5 4 3 0 20 21