繁体   English   中英

更快地从一个数据帧获取行数据(基于条件)并合并到另一个b pandas python上

[英]Faster way to get row data (based on a condition) from one dataframe and merge onto another b pandas python

我有两个具有不同索引和长度的数据帧。 如果行匹配相同的股票代码和年份,我想从asset_df的资产列中获取数据。 见下文。

我使用for循环创建了一个简单的实现,但我想有更好的,更快的方法来做到这一点?

Ticker_df

Year   Ticker    Asset    Doc
2011   Fb        NaN      doc1
2012   Fb        NaN      doc2

asset_df

Year   Ticker    Asset
2011   FB        100
2012   FB        200
2013   GOOG      300

ticker_df的理想结果

Year   Ticker    Asset    Doc     
2011   Fb        100      doc1
2012   Fb        200      doc2

我的Sucky实施:

for i in ticker_df.Name.index:

    c_asset = asset_df[asset_df.tic == ticker_df.Name.ix[i]]
    if len(c_asset) > 0:
    #This checks to see if there is actually asset data on this company
        asset = c_asset[c_asset.fyear == ticker_df.Year.ix[i]]['at']

        if len(asset) > 0:
            asset =  int(asset)
            print 'g', asset, type(asset)
            ticker_df.asset.ix[i] = asset
            continue

        else:
            ticker_df.asset.ix[i] = np.nan
            continue

    if len(c_asset) == 0:
        ticker_df.asset.ix[i] = np.nan
        continue

您可以使用更新方法。 只需首先对齐索引。

In [23]: ticker_df['Ticker'] = ticker_df.Ticker.str.upper()

In [24]: ticker_df = ticker_df.set_index(idx)

In [25]: asset_df = asset_df.set_index(idx)

In [26]: ticker_df.update(asset_df)

In [27]: ticker_df
Out[27]: 
             Asset   Doc
Year Ticker             
2011 FB        100  doc1
2012 FB        200  doc2

[2 rows x 2 columns]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM