我目前正在将panda用于数据科学目的,这是非常非原创的,所以我确信有一种比我更好的方法是将列添加到从其他人计算的数据框中,擅长时尚。
例如,我有一个数据框,其中我有一个质量和一个句点,我想添加一个列(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)
它甚至不像我想要的那样行动,并且写入和读取都非常复杂(这里,等式非常简单)。有什么建议吗?
答案 0 :(得分:5)
你不应该在这里使用申请。您应该将新列编写为一个看起来像这样的矢量化操作。
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