Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
搜索唯一单元格和乘法行(Python)_Python_Pandas_Dataframe - Fatal编程技术网

搜索唯一单元格和乘法行(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列表,那么默认的合并类型是内部的,因此在合并中只保留精确的匹配项