我有如下的DataFrame:
rng = pd.date_range('2020-12-01', periods=5, freq='D')
df = pd.DataFrame({"ID" : ["1", "2", "1", "1", "2"],
"Date" : rng,
"status" : ["B2", "G8", "G8", "R7", "G8"]})我需要创建DataFrame的位置:
的最后协议日期
下面我上传了我需要的结果:

发布于 2020-12-22 10:56:45
首先,使用status通过Series.isin过滤行,然后在last聚合函数中使用DataFrame.pivot_table:
df = (df[df['status'].isin(['B2','G8'])]
.pivot_table(index='ID', columns='status', values='Date', aggfunc='last')
.rename(columns={'B2':'New1','G8':'New2'})
.reset_index()
.rename_axis(None, axis=1)
)
print (df)
ID New1 New2
0 1 2020-12-01 2020-12-03
1 2 NaT 2020-12-05或者您可以将不匹配的行替换为status到Date中的NaT。
df = (df.assign(Date = df['Date'].where(df['status'].isin(['B2','G8'])))
.pivot_table(index='ID', columns='status', values='Date', aggfunc='last')
.rename(columns={'B2':'New1','G8':'New2'})
.reset_index()
.rename_axis(None, axis=1)
)https://stackoverflow.com/questions/65407399
复制相似问题