[英]Capturing values of variables across dataframes from a dict of dataframes in 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.