搜索唯一单元格和乘法行(Python)
我有一个大的数据帧,我想用另一个表中的唯一值乘以一行。 对于列值,我希望搜索第二个数据帧(仅为这些行)以查找我的大数据帧中的匹配项,然后将搜索唯一单元格和乘法行(Python),python,pandas,dataframe,Python,Pandas,Dataframe,我有一个大的数据帧,我想用另一个表中的唯一值乘以一行。 对于列值,我希望搜索第二个数据帧(仅为这些行)以查找我的大数据帧中的匹配项,然后将big\u frame.size与second\u 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
big\u frame.size
与second\u 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 lock函数“$A$1”这样的功能,因为我不希望为每个值制作一个大帧来匹配len(big\u frame)
,因为大帧是一个大帧
在big_frame中添加一个包含价格的列,然后进行乘法,这也是一个可以接受的解决方案(尽管在我看来,这会减慢过程,对吗?)
有什么建议吗?您可以使用
merge
创建一个合并的df,该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
这很有效,谢谢。我想补充的是,对于我的实际帧,它造成了一个问题,因为我在那里有更多的数据,当添加
merged=df1.merge(df2,on=['x','y'])时,它工作得非常完美。
默认情况下,它将在所有列上匹配,如果您传递一个col列表,那么默认的合并类型是内部的,因此在合并中只保留精确的匹配项