Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加数据框计算列(如Excel中的列)_Python_Pandas_Dataframe - Fatal编程技术网

Python 添加数据框计算列(如Excel中的列)

Python 添加数据框计算列(如Excel中的列),python,pandas,dataframe,Python,Pandas,Dataframe,我目前正在使用panda进行数据科学研究,这是一种非常非原创的方法,因此我确信有一种比我更好的方法,即以excel方式将列添加到从其他列计算的数据框架中 例如,我有一个数据帧,其中有一个质量和一个周期,我想添加一个列,其中(M/p)^(1/3),M和p以适当的单位转换。然后我写 day_sec=60.0*60.0*24.0 Msun=1.989 * 10**30 clean=reduced.dropna() v=pd.DataFrame(clean['orbital_period'].apply

我目前正在使用panda进行数据科学研究,这是一种非常非原创的方法,因此我确信有一种比我更好的方法,即以excel方式将列添加到从其他列计算的数据框架中

例如,我有一个数据帧,其中有一个质量和一个周期,我想添加一个列,其中(M/p)^(1/3),M和p以适当的单位转换。然后我写

day_sec=60.0*60.0*24.0
Msun=1.989 * 10**30
clean=reduced.dropna()
v=pd.DataFrame(clean['orbital_period'].apply(lambda x: x**(1/3.0))/clean['star_mass'].apply(lambda x: x**(1/3.0)), columns=list('v'))*day_sec/(Msun**(1/3.0))
clean.append(v)

它甚至不像我想要的那样,写和读都非常复杂(这里,等式非常简单)。有什么建议吗?

您不应该在这里使用apply。您应该将新列编写为一个向量化操作,如下所示

clean['v'] = clean['orbital_period'] ** (1/3.0) / clean['star_mass'] ** (1/3.0) *day_sec/(Msun**(1/3.0))
看起来可以简化为以下内容:

power = 1/3.0
(clean.orbital_period / (clean.star_mass * Msun)) ** power * day_sec

你不应该在这里使用apply。您应该将新列编写为一个向量化操作,如下所示

clean['v'] = clean['orbital_period'] ** (1/3.0) / clean['star_mass'] ** (1/3.0) *day_sec/(Msun**(1/3.0))
看起来可以简化为以下内容:

power = 1/3.0
(clean.orbital_period / (clean.star_mass * Msun)) ** power * day_sec

如果要从现有列创建新列,最好的方法是使用
df['c']=df['a']+df['b']
。如果要从现有列创建新列,最好的方法是使用
df['c']=df['a']+df['b']
。或者使用
pow
,例如
pow(clean.orbital_period/(clean.star_mass*Msun),1/3.0)*day_sec
应该可以工作。当我运行代码时,我得到:/Users/Home/anaconda/lib/python2.7/site packages/ipykernel/u main_uuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py:5:SettingWithCopyWarning:试图在数据帧的切片副本上设置一个值。请尝试使用.loc[行索引器,列索引器,列索引器]=用
pow
代替的值,类似于
pow(clean.orbital_period/(clean.star_mass*Msun),1/3.0)*day_sec
应该可以工作。当我运行代码时,我得到:/Users/Home/anaconda/lib/python2.7/site packages/ipykernel/_main_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu