我有带有客户协议的DataFrame,如下所示:
rng = pd.date_range('2020-12-01', periods=5, freq='D')
df = pd.DataFrame({ "ID" : ["1", "2", "1", "2", "2"],
"value" : [100, 200, 300, 400, 500],
"status" : ["active", "finished", "active", "finished", "active"],
"Date": rng})
而且我需要根据上述df创建一个新的DataFrame并进行计算:
为了更精确,我需要创建如下的df:
使用DataFrame.sort_values
通过这两列DataFrame.pivot_table
与聚合函数last
:
df = (df.sort_values(['ID','Date'])
.pivot_table(index='ID', columns='status', values='value', aggfunc='last')
.rename(columns={'active':'New1','finished':'New2'})[['New1','New2']]
.reset_index()
.rename_axis(None,axis=1)
)
print (df)
ID New1 New2
0 1 300.0 NaN
1 2 500.0 400.0
如果按组对日期时间进行排序,则解决方案会更简单:
df = (df.pivot_table(index='ID', columns='status', values='value', aggfunc='last')
.rename(columns={'active':'New1','finished':'New2'})[['New1','New2']]
.reset_index()
.rename_axis(None,axis=1)
)
print (df)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句