我想将单个函数应用于数据框列。该函数返回多个结果,我想转到原始数据框中的多个列。我似乎无法解决“太多值无法解压”错误......
df = pd.DataFrame(data={'x': [1,2,3,4]})
x
0 1
1 2
2 3
3 4
Run Code Online (Sandbox Code Playgroud)
我想应用的功能:
def do_math(x):
double = 2*x
triple = 3*x
return double, triple
Run Code Online (Sandbox Code Playgroud)
我尝试应用它(这不起作用):
df['DOUBLE'], df['TRIPLE'] = df['x'].apply(do_math)
Run Code Online (Sandbox Code Playgroud)
我想要的是 :
x DOUBLE TRIPLE
0 1 2 3
1 2 4 6
2 3 6 9
3 4 8 12
Run Code Online (Sandbox Code Playgroud)
您可以将结果转换为Series.apply列表,然后分配给多列
df[['DOUBLE', 'TRIPLE']] = df['x'].apply(do_math).tolist()
Run Code Online (Sandbox Code Playgroud)
print(df)
x DOUBLE TRIPLE
0 1 2 3
1 2 4 6
2 3 6 9
3 4 8 12
Run Code Online (Sandbox Code Playgroud)
您还可以尝试DataFrame.apply使用以下行result_type='expand'
print(df)
x DOUBLE TRIPLE
0 1 2 3
1 2 4 6
2 3 6 9
3 4 8 12
Run Code Online (Sandbox Code Playgroud)
print(df)
x DOUBLE TRIPLE
0 1 2 3
1 2 4 6
2 3 6 9
3 4 8 12
Run Code Online (Sandbox Code Playgroud)
既然你的操作很简单,你也可以尝试一下df.eval
df[['DOUBLE', 'TRIPLE']] = df.apply(lambda row: do_math(row['x']), axis=1, result_type='expand')
Run Code Online (Sandbox Code Playgroud)
print(df)
x double triple
0 1 2 3
1 2 4 6
2 3 6 9
3 4 8 12
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |