问题描述
我有一个包含多列的DataFrame:
#list
list = [('Bass',"Albert",15),('Bass',"Daniel",12),"Paul",31),"Tony",11),('Palmer',22),30),50),('Smith',29),9),24)]
# Create a DataFrame object
import pandas as pd
df = pd.DataFrame(list,columns =['Surname','Name','age'])
我希望每个Surname
用age
的{{1}}除age
列中的值(即,对于Bass姓氏,用31,然后将Palmer除以30,以此类推),然后将这些值存储在名为Paul
的新列中,并使这些结果与相应的age_normalized
age_initial
现在是时候分割这些值并合并数据帧了
df = df.set_index("Surname")
df2 = df.loc[df.Name =="Paul"]
这是我的问题: results = df["age"]/df2['age']
merge_df = df.merge(results,left_index=True,right_index=True,suffixes = ("_initial","_normalized"))
合并时,每个名称都有4个结果,而不是一个
print
如何合并两个数据框并使初始年龄与相应的归一化年龄相匹配?
解决方法
为了解决这个问题,我先将 df
与 df2
合并,而不是将 results
合并,然后再进行分割
df2_area = df2["age"]
mer = df.merge(df2_area,on="Surname")
mer[["age_norm"]] = mer[['age_x']].div(mer['age_y'].values,axis=0)