Python 如何在链式操作中引用数据帧的当前版本
假设我有以下数据集:Python 如何在链式操作中引用数据帧的当前版本,python,pandas,Python,Pandas,假设我有以下数据集: 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.to
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
的新变量。我遇到的问题是,我不知道如何引用dataframe的“当前版本”来使用新创建的变量。我意识到我可以将我目前拥有的东西保存到time\u table
,然后使用time\u table[“difference”]=time\u table.tip\u fcst-time\u 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)
太棒了。我没有意识到assign
会将整个数据帧传递给lambda函数。谢谢