簡體   English   中英

通過根據唯一 ID 將最小值到最大值排序並附加到 python 中的 DataFrame 來轉置多個日期

[英]Transposing Multiple dates by sorting min to max based on unique ID and appending to DataFrame in python

給定數據是

ID 日期
1個 10/20/2019
2個 11/02/2019
3個 12/12/2019
1個 02/06/2019
1個 2018-05-14
3個 2019 年 5 月 13 日
2個 07/20/2018
3個 08/23/2019
2個 2018/06/25

我想要這種格式

ID 日期 1 日期2 日期3
1個 2018-05-14 02/06/2019 10/20/2019
2個 2018/06/25 07/20/2018 11/02/2019
3個 2019-05-13 08/23/2019 12/12/2019

我正在使用 For Loop 在 4,00,000 多個唯一 ID 上實現它並且它很耗時。 有什么簡單的方法嗎?

我正在使用這段代碼:

每個保單編號都有多個日期,我希望它們按最小值到最大值排列在不同列中的一行中,如第二張表中所述。

f= pd.DataFrame()

for i in range(0,len(uni_pol)):
    d=ct.loc[ct["Policy_no"]== uni_pol[I]]
    t=d.sort values ('DATE", ascending=True).T
    df=pd.DataFrame(t)
    a=df. loc['Policy_no' ]
    col=df.columns
    df['Policy_no']= a.loc[ col[0] ]

    for j in range(0, len(col)):
        nn= str(j+1)
        name="Paydt"+nn
        df[name] = df[col[j]]
        CC= col[j]
        df=df.drop([cc], axi5-1)
        j=j+1

    f = f.append(df. loc[' DATE'])

這是一種方法:

按“日期” sort_values 然后groupby並根據日期創建一個列表; 這構建了一個系列。 然后從系列中的列表創建一個 DataFrame:

df['date'] = pd.to_datetime(df['date'])
s = df.sort_values(by='date').groupby('id')['date'].agg(list)
out = pd.DataFrame(s.tolist(), index=s.index, columns=[f'date{i}' for i in range(1,len(s.iat[0])+1)]).reset_index()

Output:

   id      date1      date2      date3
0   1 2018-05-14 2019-02-06 2019-10-20
1   2 2018-06-25 2018-07-20 2019-11-02
2   3 2019-05-13 2019-08-23 2019-12-12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM