python - 关于 pandas groupby 应用列作为参数
问题描述
我有一个函数f(a, b)
where a, b
arepandas.Series
并且它pandas.Series
c
以相同的长度返回a
and b
。
现在我有两个系列A
,B
它们具有相同的 Multiindex。A, B
是由许多小的series(a1, a2, a3, a4, a5...), (b1, b2, b3, b4, b5...)
. 鉴于我不能用来f(A, B)
直接计算结果。我想使用 groupby 来计算结果f(a1, b1), f(a2, b2), f(a3, b3)
,并将它们连接在一起。
我该怎么做?
样本数据、函数和预期输出。(我知道在 pandas 中使用其他方法可以轻松处理此示例,但我只想谈谈 groupby 方法。谢谢)
a1 0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a2 0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
a3 0 2
1 3
2 4
3 5
4 6
5 7
6 8
7 9
8 10
9 11
b1 0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 1.0
6 0.0
7 0.0
8 -1.0
9 0.0
b2 0 0.0
1 1.0
2 0.0
3 0.0
4 0.0
5 0.0
6 0.0
7 0.0
8 -1.0
9 0.0
b3 0 0.0
1 0.0
2 0.0
3 0.0
4 -1.0
5 0.0
6 1.0
7 0.0
8 0.0
9 0.0
c1 0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 5.0
6 6.0
7 7.0
8 -8.0
9 -9.0
c2 0 0.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
6 7.0
7 8.0
8 -9.0
9 -10.0
c3 0 0.0
1 0.0
2 0.0
3 0.0
4 -6.0
5 -7.0
6 8.0
7 9.0
8 10.0
9 11.0
def f(a, b):
loc = 0
res = np.zeros(len(a))
for i in range(len(b1)):
if b[i] != 0:
if b[i] != loc:
loc = b[i]
res[i] = a[i] * loc
return res
解决方案
你可以这样解决问题:
# result is a Series of numpy arrays
result = (
pd.DataFrame({'A': A, 'B': B})
.groupby(level=0)
.apply(lambda x: f(x['A'], x['B'])))
# now result is a Series of float values
result = pd.Series(list(itertools.chain(*result.values)))
推荐阅读
- python - 如何在 Python 中使用多个条件进行快速排序?
- excel - 复制到特定工作表:openpyxl - 使用 copy_worksheet 时忽略目标工作表
- glsl - Glslang 着色器“头”文件命名约定
- swift - 由于缺少依赖项,Moscapsule 阻止为 watchOS 构建应用程序
- powershell - 有没有办法自动将一个文件复制到另一个位置?
- csv - 如何使用 tcl 将多个 csv 文件组合成一个 csv 文件
- python - 如何从 Python 的两个列表中创建一个没有 numpy 或 pandas 的带有标签的二维数组?
- c++ - getline() 如何在 while 循环条件下评估为真或假?
- c# - 在mac中找不到匹配命令“dotnet-aspnet-codegenerator”asp.net core 2.1项目的可执行文件
- javascript - 删除对象上的字段,然后删除从中克隆的对象上的字段