我是熊猫的新手,而且我已经尝试完成这项任务几天了,但没有成功。一开始我有3个数据框,应该将所有信息变成一个。我设法正确地合并了其中两个,即现在的df1
,但是,对于第三个,我仍然无法弄清一个棘手的逻辑。数据结构如下:
df1.head()
Out[12]:
Concat YearNb_x MonthNb_x WeekNb_x NatCoCode VariantCode \
1 BN2004384AAA112017 2017 1 1 AAA BN2004384
2 BN2004388AAA112017 2017 1 1 AAA BN2004388
4 BN2004510AAA112017 2017 1 1 AAA BN2004510
5 BN2004645AAA112017 2017 1 1 AAA BN2004645
6 BN2004780AAA112017 2017 1 1 AAA BN2004780
Suppliercode_x ModelName_x SumOfVolume Price
1 HUAWEI P9 (Eva) 745 399.991667
2 HUAWEI P9 lite (Venus) 1770 211.666667
4 SAMSUNG A3 (2016) 6210 205.000000
5 APPLE iPhone 6s Plus 2 724.166667
6 SAMSUNG Galaxy J5 (2016) 4571 190.000000
df2.head()
Out[13]:
YearNb MonthNb WeekNb NatCoCode VariantCode Suppliercode \
0 2016 1 1 BBB BN2001707 APPLE
1 2016 1 2 BBB BN2001707 APPLE
2 2016 1 3 BBB BN2001707 APPLE
3 2016 1 4 BBB BN2001707 APPLE
4 2016 1 1 BBB BN2002345 SAMSUNG
ModelName LocalPrice ProductCategoryCode
0 iPhone 4S 385.0 HS
1 iPhone 4S 385.0 HS
2 iPhone 4S 385.0 HS
3 iPhone 4S 385.0 HS
4 G. Note 2 (N7100) 395.0 HS
除了价格之外的所有其他信息都应该是相同的,我需要做的是在df2中针对相同的商品组合查找价格(可以按月,可以忽略WeekNb)( NatCoCode,VariantCode,Supplier等),如果相应月份的价格不可用,则df1应该以最新可用。
我正在尝试以下逻辑,但显然不起作用:
import pandas as pd
df1 = pd.read_excel('output2.xlsx')
df2 = pd.read_excel('localtest.xlsx')
def PriceAssignment(df1,df2):
i = 1
while i >= 5:
for i in df1['VariantCode'], df2['BNCode']:
if df1.loc[df1[i], df1['YearNb_x'], df1['WeekNb_x'], df1['NatCoCode'], df1['VariantCode']] == df2.loc[df2[i], df2['YearNb_x'], df2['WeekNb_x'], df2['NatCoCode'], df2['VariantCode']]:
df1['LocalPrice'] == df2.loc['Price']
elif df2['MonthNb']==12:
df2['YearNb'] -= i
else:
df2['MonthNb'] -= i
i += 1
return df1
输出类似于:
From:
2017 2 OBE BN2004780BBB622017 SAMSUNG Galaxy J5 (2016) 500
2017 2 OBE BN2005184BBB622017 APPLE iPhone 6s Plus 300
2017 1 OBE BN2005190BBB622017 APPLE iPhone 7 350
To:
771 BN2004780BBB622017 2017 2 6 BBB BN2004780 SAMSUNG Galaxy J5 (2016) 67 171.9008264
772 BN2005184BBB622017 2017 2 6 BBB BN2005184 APPLE iPhone 6s Plus 13 614.8760331
773 BN2005190BBB622017 2017 2 6 BBB BN2005190 APPLE iPhone 7 1261 690.9090909
Result:
771 BN2004780BBB622017 2017 2 6 BBB BN2004780 SAMSUNG Galaxy J5 (2016) 67 171.9008264 500
772 BN2005184BBB622017 2017 2 6 BBB BN2005184 APPLE iPhone 6s Plus 13 614.8760331 300
773 BN2005190BBB622017 2017 2 6 BBB BN2005190 APPLE iPhone 7 1261 690.9090909 350
在此示例中,记录777没有当月的本地价格(03),在这种情况下,我想为该商品分配最新的可用价值,在这种情况下,我希望为此商品分配最新的价值项目是从前一个月开始的,因此将其添加到LocalPrice列中
我试图检查过去五个月中同一商品的可用价格(主观)。 可以找到数据(电子表格) HERE
有人对如何执行这种操作有任何想法或知道正确的方法吗?