簡體   English   中英

用來自另一個數據框中的字符串匹配的平均值列向pandas數據框附加

[英]Append pandas dataframe with column of averaged values from string matches in another dataframe

現在,我有兩個從Excel導入構建的數據框(分別稱為A和B)。 兩者都有不同的尺寸以及一些空/ NaN單元。 假設A是單個型號的數據,B是一組訂單信息。 對於A中的每一行(唯一項目),我想在B中搜索該項目編號的(可能)多個訂單,平均相應的價格,並在A后面附加一列,其中包含每個項目的平均價格。

項目編號為字母數字,因此必須為字符串。 並非每件商品都會有訂單/價格信息,我將在下一步中刪除它們。 這是大量的數據,因此效率是理想的,因此迭代可能不是正確的選擇。 先感謝您!

這是我到目前為止的內容:

avgPrice = []
for index, row in dfA.iterrows():
    def avg_unit_price(item_no, unit_price):
        matchingOrders = []
        for item, price in zip(item_no, unit_price):
            if item == row['itemNumber']:
                matchingOrders.append(price)
        avgPrice.append(np.mean(matchingOrders))  
    avg_unit_price(dfB['item_no'], dfB['unit_price'])
dfA['avgPrice'] = avgPrice

通常,請避免循環,因為它們表現不佳。 如果您不容易向量化,那么作為最后的選擇,您可以嘗試pd.Series.apply。 在這種情況下,兩者都不是必需的。

import pandas as pd

# B: pricing data
df_b = pd.DataFrame([['I1', 34.1], ['I2', 541.31], ['I3', 451.3], ['I2', 644.3], ['I3', 453.2]],
                    columns=['item_no', 'unit_price'])

# create avg price dictionary
item_avg_price = df_b.groupby('item_no', as_index=False).mean().set_index('item_no')['unit_price'].to_dict()

# A: product data
df_a = pd.DataFrame([['I1'], ['I2'], ['I3'], ['I4']], columns=['item_no'])

# map price info to product data
df_a['avgPrice'] = df_a['item_no'].map(item_avg_price)

# remove unmapped items
df_a = df_a[pd.notnull(df_a['avgPrice'])]

暫無
暫無

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

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