python - 如何仅使用返回多个值的函数的一个特定输出来操作列条目?
问题描述
我有一个这样的数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame({'a': range(4), 'b': range(2, 6)})
a b
0 0 2
1 1 3
2 2 4
3 3 5
我有一个返回多个值的函数。在这里,我只使用了一个虚拟函数,它返回某个输入可迭代的最小值和最大值:
def return_min_max(x):
return (np.min(x), np.max(x))
现在我想例如将每列的最大值添加到相应列中的每个值。
所以
df.apply(return_min_max)
给
a (0, 3)
b (2, 5)
进而
df.add(df.apply(return_min_max).apply(lambda x: x[1]))
产生预期的结果
a b
0 3 7
1 4 8
2 5 9
3 6 10
我想知道是否有一种更直接的方法可以避免两个链式apply
的。
只想确认一下:
我对一个不感兴趣
df.add(df.max())
型解决方案。我强调了dummy_function
以说明这不是我的实际功能,而只是用作具有多个输出的最小示例功能。
解决方案
再看一遍,你return_min_max
是一个列函数。所以还不错。你可以这样做,例如:
# create a dataframe for easy access
ret_df = pd.DataFrame(df.apply(return_min_max).to_dict())
# a b
# 0 0 2
# 1 3 5
# add
df.add(ret_df.loc[1], axis=1)
输出:
a b
0 3 7
1 4 8
2 5 9
3 6 10
和 numpy 广播:
df.values[None,:] + ret_df.values[:,None]
给出:
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 3, 7],
[ 4, 8],
[ 5, 9],
[ 6, 10]]], dtype=int64)
推荐阅读
- c# - 将 ComboBox 中的选定索引作为 XAML 数据绑定中的转换器参数传递
- linux - 我应该在 docker 中构建操作系统吗?
- javascript - 将多个视频 Blob 转换为一个并保存
- javascript - Droparea 不起作用,Jquery -> 拖放显示图像而不上传
- python - 如何从python中的文件夹中一一读取pdf文件
- c++ - 学习 C++ 中的多线程:添加线程并不能提高执行速度,即使看起来应该
- java - 调用构造函数中的线程“Thread-4”java.lang.NullPointerException 中的异常
- node.js - Node/Express/MySQL - 检索行时服务器崩溃
- python - 如何在标准环境中将文件加载到 Google-App-Engine
- python - Python-crontab 模块