我有一个很大的数据帧,我想将另一行与另一个表中的唯一值相乘。对于列值,我想在我的大数据帧中搜索第二个数据框(仅是那些行(以匹配项,然后将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,这会减慢这个过程,对吧?有什么建议吗?
您可以使用
merge
创建一个合并的 df,它将合并所有列并执行内部合并,以便只保留完全匹配项,然后只需将 2 列相乘:
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