如何在与熊猫相同的赋值函数中使用创建的变量 - python

一些简单的数据可以帮助我们入门:

import pandas as pd
import numpy as np

df = pd.DataFrame({"x": np.random.normal(size=100), "y": np.random.normal(size=100)})

因此,到目前为止,我一直认为assign等同于mutate库中的dplyr。但是,如果我尝试使用在同一assign步骤的assign步骤中创建的变量,则会收到错误消息。考虑以下内容,这在R中是可以接受的:

df %>%
  mutate(z = x * y, w = z + 10)

如果我尝试在pandas中使用等效项,则会收到错误消息:

df.assign(z = df.x * df.y, w = z + 10) # Error
df.assign(z = df.x * df.y, w = lambda d: d.z + 10) # Error

我想到的唯一方法是使用两个assign步骤:

df.assign(z = df.x * df.y).assign(w = lambda d: d.z + 10)

有什么我想念的吗?还是还有另一个更合适的功能?

参考方案

您可以使用DataFrame.eval(..., inplace=False)方法,如下所示:

In [79]: qry = """
    ...: z = x * y
    ...: w = z + 10    # NOTE: next variable must be on a new line 
    ...: """

In [80]: df.eval(qry, inplace=False)
Out[80]:
           x         y         z          w
0  -0.636271 -0.493260  0.313847  10.313847
1   0.298998  0.266673  0.079735  10.079735
2  -0.836940 -0.593346  0.496595  10.496595
3   0.497099 -0.199589 -0.099215   9.900785
4   2.187165 -0.332140 -0.726445   9.273555
5   0.472785  0.169204  0.079997  10.079997
6  -0.847666 -1.519570  1.288088  11.288088
7   1.262524  1.008820  1.273660  11.273660
8  -0.632817 -0.463941  0.293590  10.293590
9  -0.955913 -1.149799  1.099107  11.099107
10 -1.260231  0.000266 -0.000336   9.999664
11  1.054885 -1.390762 -1.467094   8.532906
12 -1.048271  0.816762 -0.856187   9.143813
13 -0.814064 -0.070574  0.057452  10.057452
14 -1.279904 -1.079151  1.381211  11.381211
15  0.223787 -0.887732 -0.198663   9.801337
16 -0.493267 -0.064099  0.031618  10.031618
17 -0.549534  0.622976 -0.342346   9.657654
18 -0.261209  0.267250 -0.069808   9.930192
19 -2.948658  1.586422 -4.677815   5.322185
20 -1.959709  1.103462 -2.162465   7.837535
21  0.595782 -0.699891 -0.416983   9.583017
22 -0.059947 -0.264011  0.015827  10.015827
23  0.012929 -1.635020 -0.021139   9.978861
24  1.387415 -1.763467 -2.446660   7.553340
..       ...       ...       ...        ...
75  1.649346 -0.515930 -0.850948   9.149052
76 -1.111928 -0.674379  0.749861  10.749861
77  1.413567 -1.377679 -1.947441   8.052559
78  0.119227  0.382638  0.045621  10.045621
79  0.064824 -2.043595 -0.132474   9.867526
80 -1.135878 -0.116922  0.132809  10.132809
81 -0.423820  1.386475 -0.587616   9.412384
82  0.642123 -0.914807 -0.587419   9.412581
83 -0.495118  0.773073 -0.382763   9.617237
84  0.347832 -0.913034 -0.317582   9.682418
85  1.314090  1.633140  2.146093  12.146093
86 -0.277789  0.883307 -0.245373   9.754627
87  0.514091 -1.349400 -0.693714   9.306286
88 -0.140958 -0.264500  0.037283  10.037283
89 -0.975843 -0.608312  0.593617  10.593617
90  0.242816  0.749860  0.182078  10.182078
91  1.185033 -0.487483 -0.577683   9.422317
92 -0.258952 -0.532178  0.137809  10.137809
93  2.015797  1.788613  3.605481  13.605481
94 -0.415403  0.224944 -0.093442   9.906558
95 -0.082239 -1.479761  0.121693  10.121693
96 -0.707825  2.074192 -1.468165   8.531835
97  0.517926  0.043832  0.022702  10.022702
98 -0.667368 -0.916520  0.611656  10.611656
99  0.366614  0.620221  0.227382  10.227382

[100 rows x 4 columns]

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python:图像处理可产生皱纹纸效果 - python

也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

重命名默认ID python - python

我想连接两个dataFrames,但是两个数据具有不同的ID,所以结果是错误的这是我的代码data=pd.DataFrame(df.columns) data1=data.drop(axis=1,index=[0,1,2,3]).transpose() data1 这是dataframe1另一个数据框:y=sma_algo(df.loc['H+L&…

如何在Ubuntu 10.04上安装python软件包 - python

我想在Ubuntu 10.04上安装一些python软件包。我对openssl版本有问题,无法在此Ubuntu上对其进行升级。我也尝试过手动下载模块并运行python3 setup.py install,但是它说我没有setuptools,也无法在此Ubuntu上安装。是否有pythonhosted.org的替代品,它允许较旧的openssl版本以及如何进行…