[英]if there are multiple dates for an ID then only min and max date should be present as shown
[英]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.