我有一个大型数据框,我希望将一行与另一个表中的唯一值相乘。
对于值列,我想在我的大数据帧中搜索匹配的第二个数据框(只有那些行),然后将big_frame.size
乘以second_frame.price
big_frame=
name year size *value*
v1 2015 5 50
v1 2015 5 50
v1 2015 5 50
v1 2015 5 50
v1 2016 5 75
v1 2016 5 75
v1 2016 5 75
v1 2016 5 75
v1 2016 5 75
v2 2015 4 36
v2 2015 4 36
v2 2015 4 36
v2 2016 4 100
v2 2016 4 100
v2 2016 4 100
second_frame =
name year size price
v1 2015 5 10
v1 2016 5 15
v2 2015 4 9
v2 2016 4 25
我尝试使用.loc
来获取值,但它抱怨帧的长度不同。我希望有类似excels锁定函数“$ A $ 1”的东西,因为我不想为每个值设置一个大的框架来匹配len(big_frame)
,因为big_frame是一个很大的。
在big_frame中添加一个价格然后乘以的列也是一个可以接受的解决方案(虽然imo会减慢这个过程,对吧?) 有什么建议吗?
答案 0 :(得分:1)
你可以使用merge
创建一个合并的df,它将在所有列上合并并执行内部合并,因此只保留完全匹配,然后将两列相乘:
In [6]:
merged = df1.merge(df2)
merged
Out[6]:
name year size price
0 v1 2015 5 10
1 v1 2015 5 10
2 v1 2015 5 10
3 v1 2015 5 10
4 v1 2016 5 15
5 v1 2016 5 15
6 v1 2016 5 15
7 v1 2016 5 15
8 v1 2016 5 15
9 v2 2015 4 9
10 v2 2015 4 9
11 v2 2015 4 9
12 v2 2016 4 25
13 v2 2016 4 25
14 v2 2016 4 25
In [7]:
merged['value'] = merged['size'] * merged['price']
merged
Out[7]:
name year size price value
0 v1 2015 5 10 50
1 v1 2015 5 10 50
2 v1 2015 5 10 50
3 v1 2015 5 10 50
4 v1 2016 5 15 75
5 v1 2016 5 15 75
6 v1 2016 5 15 75
7 v1 2016 5 15 75
8 v1 2016 5 15 75
9 v2 2015 4 9 36
10 v2 2015 4 9 36
11 v2 2015 4 9 36
12 v2 2016 4 25 100
13 v2 2016 4 25 100
14 v2 2016 4 25 100