一些简单的数据可以帮助我们入门:
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版本以及如何进行…