python - 使用方法链接从同一数据框中的多列中减去一列
问题描述
我在 pandas 中有一个数据框,我想col1
从col2
and col3
(或者从更多列,如果有)中减去一列(比如说),而不为每一列编写下面的分配语句。
df = pd.DataFrame({'col1':[1,2,3,4], 'col2':[2,5,6,8], 'col3':[5,5,5,9]})
df = (df
...
.assign(col2 = lambda x: x.col2 - x.col1)
)
我怎样才能做到这一点?或者它会与应用一起工作吗?你怎么能用方法链来做到这一点?
解决方案
编辑:(使用**kwarg
链接方法)
如您的评论所示,如果您想在中间(正在进行的计算)数据帧上链接方法,您需要定义一个自定义字典来计算要使用的每一列,assign
如下所示(您不能使用 lambda 直接在里面构造字典assign
)。
在此示例中,我add
在链接之前对数据框执行 5 以assign
显示它如何根据需要在链处理中工作
d = {cl: lambda x, cl=cl: x[cl] - x['col1'] for cl in ['col2','col3']}
df_final = df.add(5).assign(**d)
In [63]: df
Out[63]:
col1 col2 col3
0 1 2 5
1 2 5 5
2 3 6 5
3 4 8 9
In [64]: df_final
Out[64]:
col1 col2 col3
0 6 1 4
1 7 3 3
2 8 3 2
3 9 4 5
注:因操作与之前df_final.col1
有所不同。不要忘记字典的 lambda。它可以避免 python 的后期绑定问题。df.col1
add
assign
cl=cl
采用df.sub
df_sub = df.assign(**df[['col2','col3']].sub(df.col1, axis=0).add_prefix('sub_'))
Out[22]:
col1 col2 col3 sub_col2 sub_col3
0 1 2 5 1 4
1 2 5 5 3 3
2 3 6 5 3 2
3 4 8 9 4 5
如果要将值分配回col2
, col3
,请使用附加update
df.update(df[['col2','col3']].sub(df.col1, axis=0))
print(df)
Output:
col1 col2 col3
0 1 1 4
1 2 3 3
2 3 3 2
3 4 4 5
推荐阅读
- pentaho - Pentaho - 使用什么步骤来翻转桌子的一部分?
- javascript - 使用“useLocation”时如何将位置传递给道具
- python - 指定时间后 cronjob 不运行?
- amazon-s3 - Amazon S3 parquet 文件 - 传输到 GCP / BQ
- python - 使用嵌套循环修改python中的数组
- javascript - 如何将参数数据发送到抽屉堆栈中的屏幕。在本机反应
- mysql - 从数据库查询中获取总数
- google-sheets - GSheet 中是否有任何函数可以计算当前日期花费的总时间,单列中有两个不同的时间单位?
- flutter - Flutter:在警报对话框中显示资产 gif
- python - 用python在一个范围内创建n个矩阵