簡體   English   中英

使用python選擇跨數據幀的行值

[英]Select values of rows across dataframes using python

我有兩個數據框,一個是在 COVID 大流行期間在多個超市填充條形碼及其產品價格,另一個包含實際產品名稱及其條形碼以及一些已知的 category_id 等(所以我知道哪個 category_id以獲取一組特定的條形碼。)

df_markets:

             BARCODE          AC    BFRESH  LIDL    SUPERM  
Date                            
2020-01-03  5201263086618   6.36    7.97    0   0   8.31             
2020-01-03  5201263086625   7.58    9.53    0   0   9.91    
2020-01-03  7322540574852   18.11   18.34   0   0   8.86    
2020-01-03  7322540647136   18.8    18.95   0   0   18.9    
2020-01-03  7322540587555   18.22   18.98   0   0   9.21  

和 df_bar:

    product_id  category_id   subcategory_name    BARCODE           name        
0   1.0             37.0       Adult diapers     5.201263e+12   Sani Pants N2 Medium 14 
1   2.0             37.0       Adult diapers     5.201263e+12   Sani Pants N3 Large 14  
2   3.0             37.0       Adult diapers     7.322541e+12   Tena Pants Plus Large 
3   4.0             37.0       Adult diapers     7.322541e+12   Tena Slip Super Large N4 
4   5.0             37.0       Adult diapers     7.322541e+12   Tena Pants Plus Extra Large 

我嘗試做的是首先在 df_bar 中找到所有 category_id 為 114.0 (這是洗滌劑)的條形碼,如下所示:

df_bar.loc[df_bar['category_id']==114.0]

並且產生了一個兩行數據框,所以我知道這個 category_id 存在,然后嘗試在 df_markets 數據框內定位所有條形碼,這個搜索查詢:

df_markets.loc[df_markets['BARCODE'].isin(df_bar.loc[df_bar['category_id']==114.0])]

像那樣,但這會產生一個像這樣的空數據框:


       BARCODE  AC  BFRESH  LIDL    SUPERM  
Date                            

所以我猜問題是 df_markets 具有這種格式的條形碼“ 5201263086618 ”,而 df_bar 具有這種格式的條形碼“ 5.201263e+12 ”。 您知道需要做什么才能有效地在 df_markets 數據框中進行搜索嗎? 或者讓我知道我的代碼是否有問題。


在 Danila 的建議之后,幫助我的一個小修改是將我的“查詢”變成了這個:

df_bar['BARCODE'] = df_bar['BARCODE'].apply(lambda x: str(x)[:-2])
#above line changed the format
df_markets.loc[df_markets['BARCODE'].isin(df_bar.loc[df_bar['category_id']==114.0]['BARCODE'])]

這樣它就可以考慮 BARCODE 列。

只需將 BARCODE 列轉換為字符串。 例子:

 df_bar['BARCODE'] = df_bar['BARCODE'].apply(lambda x: str(x)[:-2])

您可以嘗試進行解析!

file = pandas.read_excel("your_file.xlsx", 0) #  is the sheet index
for col, row in file.iterrows():
    if row.get('category_id') == 114.0:
        # do something

請注意,此解決方案可能未針對大數據框進行優化,因為它必須解析整個數據集,直到找到您需要的內容

將條形碼轉換為類似的格式。

df_bar['BARCODE'] = int(float(df_bar['BARCODE']))

假設df_bar['BARCODE']是科學計數法的數字,您可以在加載數據集之前使用以下命令:

pd.set_option('display.float_format', lambda x: '%.3f' % x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM