我的代码部分需要从一个数据帧中获取值,然后将其应用于另一个数据帧。因此,例如,假设1个数据框是学生数据框的分数,第2个是学生数据框的组合。我想通过每个组合_DF,获得学生分数,然后将它们总结为该行。
print scores_DF
Name Value
Dennis 39.66
James 45.38
Leo 40.63
Joe 20.10
etc...
print combination_DF
name1 name2 name3
Dennis James Leo
Leo Joe Dennis
现在我的程序循环遍历每个组合_DF,找到每个名称的分数,并添加一个列,其中包含每个组合的总分,这实际上减慢了我的程序因为我使用了数千个条目。所以它看起来像这样......
for index,row in combination_df.iterrows():
value0 = scores_df[scores_df['Name'] == row[0]]
value1 = scores_df[scores_df['Name'] == row[1]]
value3 = scores_df[scores_df['Name'] == row[2]]
total_score = value0['Value'].values + value1['Value'].values+ value2['Value'].values
我是Pandas的新手,当时这是我知道的唯一方式,但是随着我的程序的发展,这个代码区域需要更快地工作,谢谢。
答案 0 :(得分:0)
我认为您首先需要groupby
并汇总sum
,然后sum
与s = scores_DF.groupby('Name')['Value'].sum()
combination_DF['sum'] = combination_DF.replace(s).sum(axis=1)
汇总:
combination_DF['sum'] = combination_DF.stack().map(s).unstack().sum(axis=1)
print (combination_DF)
name1 name2 name3 sum
0 Dennis James Leo 125.67
1 Leo Joe Dennis 100.39
print (combination_DF.replace(s))
name1 name2 name3
0 39.66 45.38 40.63
1 40.63 20.10 39.66
详情:
data
答案 1 :(得分:0)
你可能会有点发烧友。首先,让我们创建一个函数
f = lambda x: scores_DF.ix[x]["Value"]
用f测试(" Dennis")......
不需要iterrows:
combintation.apply(f, axis=1).sum(axis=1)
应该有效 更多硬核用户插入f direct作为apply函数的参数...