gpt4 book ai didi

python - 如何在链式操作中引用当前版本的 Pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:11 27 4
gpt4 key购买 nike

假设我有以下数据集:

import pandas as pd
import numpy as np

df = pd.read_csv("https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv")

df["tip_fcst"] = np.random.uniform(low=0, high=0.40, size=len(df))
df["tip_fcst"] = df.tip_fcst * df.total_bill

df.head(5)
total_bill tip sex smoker day time size tip_fcst
0 16.99 1.01 Female No Sun Dinner 2 1.123689
1 10.34 1.66 Male No Sun Dinner 3 3.125474
2 21.01 3.50 Male No Sun Dinner 3 2.439321
3 23.68 3.31 Male No Sun Dinner 2 3.099715
4 24.59 3.61 Female No Sun Dinner 4 1.785596

我正在执行以下操作

time_table = (
df
.groupby("time")
.agg({"tip": lambda x:
df.ix[x.index].tip.sum() / df.ix[x.index].total_bill.sum(),
"tip_fcst": lambda x:
df.ix[x.index].tip_fcst.sum() / df.ix[x.index].total_bill.sum()
})
)

我想做的是使用 assign 添加另一个步骤来创建一个名为 difference 的新变量。我遇到的问题是我不知道如何引用数据框的“当前版本”来使用新创建的变量。我意识到我可以将到目前为止的内容保存到 time_table,然后使用 time_table["difference"] = time_table.tip_fcst - time_table.tip,但我喜欢这样链式操作的流程,并希望有一种方法可以在其中完成。这可能吗?

最佳答案

如果您使用 lambda 函数分配选定的 DF,则可以将这些链接在一起:

(df.groupby("time").agg({"tip": lambda x: df.ix[x.index].tip.sum() / df.ix[x.index].total_bill.sum(),
"tip_fcst": lambda x: df.ix[x.index].tip_fcst.sum() / df.ix[x.index].total_bill.sum()})
).assign(difference=lambda x: x.tip_fcst - x.tip)

enter image description here

关于python - 如何在链式操作中引用当前版本的 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42420712/

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