我有这样的数据集
number Shipment Date service desc amount
182692345 2/12/19 DUTIES & TAXES
IMPORT EXPORT DUTIES 561.01
IMPORT EXPORT TAXES 600.47
1827975839 2/12/19 DUTIES & TAXES
IMPORT EXPORT DUTIES 160.19
3229475633 2/12/19 DUTIES & TAXES
IMPORT EXPORT TAXES 600.47
IMPORT EXPORT DUTIES 561.01
5733894261 29/04/2020 Express
DUTIES TAXES PAID 25
FUEL SURCHARGE 3.28
1826995520 2/12/19 DUTIES & TAXES
IMPORT EXPORT TAXES 600.47
IMPORT EXPORT DUTIES 561.01
2998455062 4/5/20 Express
FUEL SURCHARGE 0.72
在 pic 格式中,它如下所示:
我想要的是,对于存在 number 和 shipment_date 的行,我们检查“Express”所在的服务。然后对于这样的行,我想将 desc col 中的“燃油附加费”行拉到与数字相同的行以及shipment_date相应的金额值。
所以像下面这样:
number Shipment Date service desc amount
182692345 2/12/19 DUTIES & TAXES
IMPORT EXPORT DUTIES 561.01
IMPORT EXPORT TAXES 600.47
1827975839 2/12/19 DUTIES & TAXES
IMPORT EXPORT DUTIES 160.19
3229475633 2/12/19 DUTIES & TAXES
IMPORT EXPORT TAXES 600.47
IMPORT EXPORT DUTIES 561.01
5733894261 29/04/2020 Express FUEL SURCHARGE 3.28
DUTIES TAXES PAID 25
1826995520 2/12/19 DUTIES & TAXES
IMPORT EXPORT TAXES 600.47
IMPORT EXPORT DUTIES 561.01
2998455062 4/5/20 Express FUEL SURCHARGE 0.72
看起来像下面的图片格式。
最后我只关心服务是“Express”的行,所以如果我们去掉所有服务不是 express 的行并获得上面的格式(仅适用于 Express 值),那将是理想的。
我认为 pandasffill()和 transform 将是主要工具。所以我正在尝试以下内容:
df1=df.copy()
df1[['number', 'shipment_date']]=df1[['number', 'shipment_date']].ffill()
df1.desc=df1.desc.fillna('')
df1.amount= df1.amount.fillna('')
s= df1.groupby(['number', 'shipment_date']).amount.transform(lambda x: ' '.join(str(x)))
df.loc[df.shipment_date.notnull(),'amount']=s
df.loc[df.shipment_date.isnull(),'amount']=''
慕婉清6462132
慕码人8056858
慕娘9325324
相关分类