float(1.0) is float(1.0) #True
float(1) is float(1) #False
Run Code Online (Sandbox Code Playgroud)
我已将float()奇怪性与此对象创建顺序隔离开来,因为
x1 = float(1)
x2 = float(1)
x1 is x2 #False
id(x1) == id(x2) #False
y1 = float(1.0)
y2 = float(1.0)
y1 is y2 #True
id(y1) == id(y2) #True
Run Code Online (Sandbox Code Playgroud)
注意:我已经检查了浮点数的精度,这不是发生这种情况的原因.
我想了解Python为何以及如何决定创建浮动对象.为什么float(1.0)指向同一个对象,而float(1)指向两个不同的对象,当它们被创建两次时?
另外,有待进一步参考:
float(1) is float(1) #False
id(float(1)) == id(float(1)) #True
float(1.0) is float(1.0) #True
id(float(1.0)) == id(float(1.0)) #True
Run Code Online (Sandbox Code Playgroud) 是否可以使用自定义函数进行groupby转换?
data = {
'a':['a1','a2','a3','a4','a5'],
'b':['b1','b1','b2','b2','b1'],
'c':[55,44.2,33.3,-66.5,0],
'd':[10,100,1000,10000,100000],
}
import pandas as pd
df = pd.DataFrame.from_dict(data)
df['e'] = df.groupby(['b'])['c'].transform(sum) #this works as expected
print (df)
# a b c d e
#0 a1 b1 55.0 10 99.2
#1 a2 b1 44.2 100 99.2
#2 a3 b2 33.3 1000 -33.2
#3 a4 b2 -66.5 10000 -33.2
#4 a5 b1 0.0 100000 99.2
def custom_calc(x, y):
return (x * y)
#obviously wrong code here
df['e'] = df.groupby(['b'])['c'].transform(custom_calc(df['c'], df['d']))
Run Code Online (Sandbox Code Playgroud)
从上面的示例可以看出,我想要的是探索将自定义函数传递到中的可能性.transform()。
我知道它 …