通过根据唯一 ID 将最小值到最大值排序并附加到 python 中的 DataFrame 来转置多个日期
Transposing Multiple dates by sorting min to max based on unique ID and appending to DataFrame in python
给出的数据是
id
date
1
10/20/2019
2
11/02/2019
3
12/12/2019
1
02/06/2019
1
05/14/2018
3
5/13/2019
2
07/20/2018
3
08/23/2019
2
06/25/2018
我想要这种格式
id
date1
date2
date3
1
05/14/2018
02/06/2019
10/20/2019
2
06/25/2018
07/20/2018
11/02/2019
3
05/13/2019
08/23/2019
12/12/2019
我正在使用 For Loop 在 4,00,000 多个唯一 ID 上实现它,这很耗时。有什么简单的方法吗?
我正在使用此代码:
每个保单号都有多个日期,我希望它们按最小到最大排列在不同列的一行中,如第二个 table 中所述。
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
"id" 并根据日期创建一个列表;这构建了一个系列。然后从 Series 中的列表创建一个 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()
输出:
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
给出的数据是
id | date |
---|---|
1 | 10/20/2019 |
2 | 11/02/2019 |
3 | 12/12/2019 |
1 | 02/06/2019 |
1 | 05/14/2018 |
3 | 5/13/2019 |
2 | 07/20/2018 |
3 | 08/23/2019 |
2 | 06/25/2018 |
我想要这种格式
id | date1 | date2 | date3 |
---|---|---|---|
1 | 05/14/2018 | 02/06/2019 | 10/20/2019 |
2 | 06/25/2018 | 07/20/2018 | 11/02/2019 |
3 | 05/13/2019 | 08/23/2019 | 12/12/2019 |
我正在使用 For Loop 在 4,00,000 多个唯一 ID 上实现它,这很耗时。有什么简单的方法吗?
我正在使用此代码:
每个保单号都有多个日期,我希望它们按最小到最大排列在不同列的一行中,如第二个 table 中所述。
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
"id" 并根据日期创建一个列表;这构建了一个系列。然后从 Series 中的列表创建一个 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()
输出:
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