问题描述
我可以使用列表推导以简单的方式在 Pandas DataFrame 中找到 f(row1,row2)
的最小值,其中 f
是返回具有比较值的任意函数:
import pandas as pd
df = pd.DataFrame({"g": [0,1,1],"x": [0,2,3,4]})
def f(row1,row2):
return (row1["x"],row2["x"])
def getmin(df):
df["f"] = [
df.drop(index=index2).apply(f,args=[row2],axis=1).min()
for index2,row2 in df.iterrows()
]
return df
所以 df
是
g x
0 0 0
1 0 1
2 1 2
3 1 3
4 1 4
和getmin(df)
返回
g x f
0 0 0 (0,1)
1 0 1 (1,0)
2 1 2 (2,0)
3 1 3 (3,0)
4 1 4 (4,0)
我可以以同样简单的方式获得每个组 "g"
中的最小值:df.groupby("g").apply(getmin)
返回
g x f
0 0 0 (0,3)
3 1 3 (3,2)
4 1 4 (4,2)
问题
是否有更有效(例如,向量化或 cythonized)的方法来定义 getmin
而不是使用列表理解?
也欢迎使用 f
的参数顺序无关紧要的解决方案(即 f(row1,row2) = f(row2,row1)
,例如 f = lambda row1,row2: sorted((row1["x"],row2["x"]))
)。
请注意,上面 getmin
的定义等效于,但比更透明的定义更有效:
def getmin(df):
minima = []
for index1,row1 in df.iterrows():
minimum = None
for index2,row2 in df.iterrows():
if index1 == index2:
continue
val = f(row1,row2)
if minimum is None or val < minimum:
minimum = val
minima.append(minimum)
df["f"] = minima
return df
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)