熊猫比较并求和两个大小不同的DataFrame之间的值

tn22288

假设我有两个大小不同的数据框:

df1 = pd.DataFrame(dict(xlow=np.linspace(0, 10, 11), 
                           xup=np.linspace(1.0, 11, 11))) 
df2 = pd.DataFrame(dict(x=np.random.uniform(low=1, high=10, size=(20,)), 
                           volume=np.random.randint(0, 10, size=20)))

我有:

df1: 
    xlow   xup
0    0.0   1.0
1    1.0   2.0
2    2.0   3.0
3    3.0   4.0
4    4.0   5.0
5    5.0   6.0
6    6.0   7.0
7    7.0   8.0
8    8.0   9.0
9    9.0  10.0
10  10.0  11.0

和:

df2:
         x  volume
0   1.632789       8
1   8.346898       7
2   1.372285       2
3   1.946896       9
4   7.047305       0
5   3.851938       4
6   2.439664       7
7   8.823509       1
8   1.136700       1
9   8.766352       8
10  2.135441       8
11  8.092385       4
12  6.532898       3
13  7.199914       2
14  1.036684       0
15  9.714326       1
16  5.964111       0
17  9.625200       2
18  9.999818       6
19  9.891857       1

现在,我想在df1中添加第三列,即total_volume,它是位于xlow和df1的xup单行之间的体积的总和。我可以使用:

df1['total_volume']=df1.apply(lambda row: df2[(df2.x<=row['xup']) & (df2.x>row['xlow'])].volume.sum(),axis=1)

which results in 

    xlow   xup  total_volume
0    0.0   1.0             0
1    1.0   2.0            20
2    2.0   3.0            15
3    3.0   4.0             4
4    4.0   5.0             0
5    5.0   6.0             0
6    6.0   7.0             3
7    7.0   8.0             2
8    8.0   9.0            20
9    9.0  10.0            10
10  10.0  11.0             0

我们可以将第二行的值检查为:

df2[(df2.x<=2) & (df2.x>1) ].volume.sum()=20

实际上,我的df1最多可以有数十万行,因此最多可能需要数十分钟才能完成。有没有更多的vectorize / pythonic方法来做到这一点。我尝试将熊猫合并并加入,但没有成功,很可能是因为我仍然是新手。

谢谢你的帮助!

耶斯列尔

如果箱不是重叠的,可以使用cut与骨料sum,然后加入到df1DataFrame.join

df2['g'] = pd.cut(df2['x'], bins=[0] + df1['xup'].tolist(), labels=df1['xup'])

df2 = df1.join(df2.groupby('g')['volume'].sum(), on='xup')
print (df2)

    xlow xup  volume
0    0.0   1       0
1    1.0   2      20
2    2.0   3      15
3    3.0   4       4
4    4.0   5       0
5    5.0   6       0
6    6.0   7       3
7    7.0   8       2
8    8.0   9      20
9    9.0  10      10
10  10.0  11       0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何比较两个不同列之间的熊猫值?

来自分类Dev

比较两个不同的熊猫列中的值

来自分类Dev

大熊猫:比较来自两个不同大小的不同数据帧的字符串列

来自分类Dev

如何在两个不同的熊猫数据框中相互比较值

来自分类Dev

比较相同结构的两个不同大小的向量

来自分类Dev

比较两个不同大小的numpy数组的最佳方法

来自分类Dev

比较相同结构的两个不同大小的向量

来自分类Dev

如何使用php比较两个不同大小的数组?

来自分类Dev

比较不同大小的两个图像的坐标

来自分类Dev

SQL:如何对不同表中的两个值求和

来自分类Dev

两个矩阵求和函数返回不同的值

来自分类Dev

在两个不同的列中按值求和的列

来自分类Dev

两个矩阵求和函数返回不同的值

来自分类Dev

R中两个不同列的值求和

来自分类Dev

两个如何比较来自两个不同数据框的熊猫的两行

来自分类Dev

熊猫:返回两个DataFrame变量之间匹配值的计数

来自分类Dev

如何比较两个不同断点之间的实例状态

来自分类Dev

合并两个不同大小不同值的字典

来自分类Dev

将两个DataFrames元素与不同的DataFrame进行比较

来自分类Dev

比较两个Unix文件之间的列值

来自分类Dev

比较两个 MySQL 表之间的最大值

来自分类Dev

提取两个值之间的熊猫列

来自分类Dev

比较两个不同数组中的值

来自分类Dev

如何对两个不同的数组值执行真假比较

来自分类Dev

比较来自不同表的两个值-MySQL

来自分类Dev

比较Swift中两个不同数组的值

来自分类Dev

比较来自不同查询的两个值

来自分类Dev

比较两个不同的excel文件中的值?

来自分类Dev

如何比较两个不同的时间值

Related 相关文章

热门标签

归档