gpt4 book ai didi

Pythons Pandas,在 GroupBy 对象上应用函数 "indexes"

转载 作者:行者123 更新时间:2023-12-01 09:17:01 27 4
gpt4 key购买 nike

我确信 Pandas 有更好的解决方案来解决我当前的问题:

我有一个包含类似列的数据框

df.columns = ['bar','foo',0,1,2]

我想调用一个 SQL 数据库,在其中使用 bar 和 foo 值的元组进行过滤,使用第 0 列和第 1 列对返回的结果进行计算,然后将结果返回到第 3 列。

目前,我使用 groupby 执行此操作,但在此之后没有找到使用转换方法的正确方法。

groups = df.groupby('bar','foo')
for (bar,foo), group in groups:
db_results = read_db(bar,foo)
df[3].loc(groups.groups((bar,foo))) = f(db_results,df[0].loc(...),df[1].loc(...))

我觉得这有点难看,对吧?一定有比到处都有的 df.loc 更多且更少冗余的东西。但我不知道如何使用 Groupby 对象的 tranform 方法访问 bar、foo。

感谢您的帮助

最佳答案

我认为需要GroupBy.apply具有自定义功能:

def func(x):
db_results = read_db(x.name[0],x.name[1])
x[3] = f(db_results, x[0], x[1])
return x

df = df.groupby(['bar','foo']).apply(func)

示例:

df = pd.DataFrame({0:list('abcdef'),
'foo':[4,5,4,5,5,4],
1:[7,8,9,4,2,3],
2:[1,3,5,7,1,0],
'bar':list('aaabbb')}, columns=['bar','foo',0,1,2])
print (df)
bar foo 0 1 2
0 a 4 a 7 1
1 a 5 b 8 3
2 a 4 c 9 5
3 b 5 d 4 7
4 b 5 e 2 1
5 b 4 f 3 0

def func(x):
print (x.name[0])
x[3] = (x[2] + x[1]) * x.name[1]
return x

df = df.groupby(['bar','foo']).apply(func)
print (df)
bar foo 0 1 2 3
0 a 4 a 7 1 32
1 a 5 b 8 3 55
2 a 4 c 9 5 56
3 b 5 d 4 7 55
4 b 5 e 2 1 15
5 b 4 f 3 0 12

关于Pythons Pandas,在 GroupBy 对象上应用函数 "indexes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51150494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com