搜索唯一的单元格和乘法行(Python Pandas)

时间:2016-02-15 09:14:50

标签: python pandas dataframe

我有一个大型数据框,我希望将一行与另一个表中的唯一值相乘。 对于列,我想在我的大数据帧中搜索匹配的第二个数据框(只有那些行),然后将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会减慢这个过程,对吧?) 有什么建议吗?

1 个答案:

答案 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