我有多个每周订单文件合并的excel文件
import pandas as pd
Jan1 = pd.read_excel(r"~\Documents\1to6janReport1.xlsx")
Jan2 = pd.read_excel(r"~\Documents\7to12janReport2.xlsx")
Jan3 = pd.read_excel(r"~\Documents\13to19janReport3.xlsx")
Jan4 = pd.read_excel(r"~\Documents\20to26janReport4.xlsx")
all_df_list = [Jan1, Jan2, Jan3,Jan4]
appended_df = pd.concat(all_df_list)
appended_df.to_excel("SallesDB1.xlsx", index=False)
文件结构如下
我想要返回一个新的数据框来计算每个买家的订单。
如果产品等于产品,而购买者不为null,并且等于购买者,则仅返回汇总中包含“产品”和“终止”的行。
我知道这很复杂,但是我需要获取每个买方订单的百分比(计算订单而不是数量)。问题在于同一产品每天都会出现,并带有一天的摘要,其中请求可能需要一天或几天才能结束,这会造成不正确的百分比。 同样,在购买者的订单结束之后,新的购买者可以订购相同的产品,或者同一购买者将开始新的订购,这是唯一知道使用摘要(start,end)作为关键字的方法。
最终结果应该像这样
Product date quantity summary buyer
NO6 2/1/2019 6 Operation product request ended KLW
ZS5 3/1/2019 5 The product request ended WHM
更新
Product date quantity summary buyer
*day1*
AX1 2/1/2019 15 The product request started today HTN
X5L 2/1/2019 0 No operation update null
NO6 2/1/2019 6 Operation product request ended KLW
ZS5 2/1/2019 5 The product request started WHM
*day2*
AX1 3/1/2019 15 Product request still pending HTN
X5L 3/1/2019 5 A new product request started LKJ
NO6 3/1/2019 0 No update for operation null
ZS5 3/1/2019 5 The product request ended WHM
*day3*
AX1 4/1/2019 15 Product request ended HTN
X5L 4/1/2019 5 The product request under-process LKJ
NO6 4/1/2019 0 No update for operation null
ZS5 4/1/2019 3 New request for the product started KLW
因此,数据表(在excel中)具有200多种产品。这些产品将每天重复。每个产品的摘要每天都有所不同。
但是我真正需要的是买家请求号(数量)。
例如,在产品 AX1 中,请求从第2个开始,在第4个结束。由于我需要购买者的数量,因此我只需要一行,其中产品==产品和购买者==买方,并且摘要包含两个字符串(产品和结束)。
哪个
Product date quantity summary buyer
AX1 4/1/2019 15 Product request ended HTN
再次,我知道它非常专心。
答案 0 :(得分:0)
您可以像这样使用布尔条件。 enter image description here请注意,此代码中的“ Nan”只是一个字符串。
newdf= df[(df['buyer'] != 'Nan')
& df['summary'].str.contains('product')
& df['summary'].str.contains('ended')
]
如果df['buyer']
中的Nan是None
,则可以使用df.dropna()
。
修改
要确认df ['Product']具有相同的值,并且df ['buyer']具有相同的值,将对所有col项目循环并仅连接全真。
p_items = pd.unique(df['Product'])
b_items = pd.unique(df['buyer'])
newdf = pd.DataFrame([], columns=['Product', 'date', 'quantity', 'summary', 'buyer'])
for p_item in p_items:
for b_item in b_items:
tmp_df = df[
(df['buyer'] != 'Nan')
& (df['Product'] == p_item)
& (df['buyer'] == b_item)
& df['summary'].str.contains('product')
& df['summary'].str.contains('ended')]
if len(tmp_df):
newdf = pd.concat([newdf, tmp_df], sort=False)
print(newdf)