首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过最近的指数加入熊猫的DataFrame值

问通过最近的指数加入熊猫的DataFrame值
EN

Stack Overflow用户
提问于 2016-12-22 17:18:03
回答 1查看 776关注 0票数 1

是否有一个快速和良好的做法来加入DataFrame值的最接近的索引?我必须这样做的大数据,我的黑客和工作周围,我已经尝试过,是缓慢的,因此不太有用。

假设我有两个数据格式:df和df2。现在,我想将df2的值加入到df中,考虑到它最近的/最近的索引。

代码语言:javascript
复制
import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(0,100,size=(4, 6)), 
                index=[1,1.55,3.33,9.88], 
                columns=[1,2.66,4.66,8.33,11.11,12])

df2 = pd.DataFrame(np.random.randint(0,100,size=(2, 3)), 
                index=[1.51,3.31], 
                columns=[2.64,4.65,8.31])

In [23]: df
Out[23]:

         1.00   2.66   4.66   8.33   11.11  12.00
1.00     98     40     28     36     49     92
1.55     52     51     61     64     28     98
3.33     66     33     91     21     24     79
9.88     30     21     13     62     89     22

In [24]: df2
Out[24]:

      2.64  4.65  11.12
1.51   999   999   999
3.31   999   999   999

# The result should look like the following:

         1.00   2.66   4.66   8.33   11.11  12.00
1.00     98     40     28     36     49     92
1.55     52     999    999    55     999    98
3.33     66     999    999    67     999    79
9.88     30     21     13     62     89     22
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-22 17:35:56

设置

因为OP数据不一致

代码语言:javascript
复制
df = pd.DataFrame(
    1,
    index=[1,1.55,3.33,9.88],
    columns=[1,2.66,4.66,8.33,11.11,12])

df2 = pd.DataFrame(
    999,
    index=[1.51,3.31],
    columns=[2.64,4.65,8.31])

print(df)

      1.00   2.66   4.66   8.33   11.11  12.00
1.00      1      1      1      1      1      1
1.55      1      1      1      1      1      1
3.33      1      1      1      1      1      1
9.88      1      1      1      1      1      1

print(df2)

      2.64  4.65  8.31
1.51   999   999   999
3.31   999   999   999

我没时间解释。文档

代码语言:javascript
复制
kw = dict(method='nearest', tolerance=.3)
df2.reindex(df.index, **kw).T.reindex(df.columns, **kw).T.combine_first(df)

      1.00   2.66   4.66   8.33   11.11  12.00
1.00    1.0    1.0    1.0    1.0    1.0    1.0
1.55    1.0  999.0  999.0  999.0    1.0    1.0
3.33    1.0  999.0  999.0  999.0    1.0    1.0
9.88    1.0    1.0    1.0    1.0    1.0    1.0

我宁愿这样做

代码语言:javascript
复制
df2.stack().reindex_like(df.stack(), **kw)

但我得到了:

NotImplementedError: MultiIndex尚未实现的方法=‘最近’;参见GitHub问题9365

至少在将来的某个时候它是可用的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41288581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档