numpy 如何在pandas中将具有日期字符串的多行标题转换为列值

oxalkeyp  于 2023-04-06  发布在  其他
关注(0)|答案(2)|浏览(142)

数据字典:{“PI编号”:{0:'日期:03/31/2023',1:‘009331’,2:‘009331’,3:'日期:2023年3月30日',4:‘009323’,5:'日期:2023年3月29日',6:‘009302’,7:'009302'},'GRN编号':{0:南,1:19614.0,2:19614.0,3:nan,4:19603.0,5:nan,6:19576.0,7:19576.0},“供应商名称”:{0:南,1:“供应商1”、2:“供应商1”、3:nan,4:“供应商2”,5:nan,6:“供应商1”,7:'供应商2'},'项目':{0:南,1:“第一项”,第二项:‘第二项’,第三项:nan,4:“项目2”,5:nan,6:“项目1”,7:'项目2'}}

如何实现下面的结果。

1mrurvl1

1mrurvl11#

使用extract和 *boolean索引 *:

out = (df.assign(Date= df["PI No."].str.extract("Date :(.*)").ffill())
         .loc[~df["PI No."].str.startswith("Date")])

输出:

print(out)
​
   PI No.  GRN No. Supplier Name    Item        Date
1  009331  19614.0    Supplier 1  Item 1  03/31/2023
2  009331  19614.0    Supplier 1  Item 2  03/31/2023
4  009323  19603.0    Supplier 2  Item 2  03/30/2023
6  009302  19576.0    Supplier 1  Item 1  03/29/2023
7  009302  19576.0    Supplier 2  Item 2  03/29/2023
hfwmuf9z

hfwmuf9z2#

使用Series.where,通过测试第二列的缺失值,按掩码正向填充缺失值:

m = df['GRN No.'].isna()
df = df.assign(Date=df['PI No.'].where(m).replace('Date :','', regex=True).ffill())[~m]
print (df)
   PI No.  GRN No. Supplier Name    Item        Date
1  009331  19614.0    Supplier 1  Item 1  03/31/2023
2  009331  19614.0    Supplier 1  Item 2  03/31/2023
4  009323  19603.0    Supplier 2  Item 2  03/30/2023
6  009302  19576.0    Supplier 1  Item 1  03/29/2023
7  009302  19576.0    Supplier 2  Item 2  03/29/2023

相关问题