将这些数据输入Pandas数据框的最有效方法是什么?

0md85ypi  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(99)

我有一个 Dataframe ,看起来像这样(英国日期):
| 类型|日期|
| - ------|- ------|
| 1个|2022年1月1日|
| 第二章|2022年2月1日|
| 三个|2022年3月1日|
| 1个|2022年4月1日|
| 第二章|2022年5月1日|
| 第二章|2022年6月1日|
我现在用一个大的for循环添加了两种类型的列,第一种是日期较早的相同类型的行数,第二种是日期较早的相同类型的最新行与当前行之间的天数(如果没有相同类型的较早行,则为-1)。
例如, Dataframe 将变为:
| 类型|日期|先前计数|自上一次以来的天数|
| - ------|- ------|- ------|- ------|
| 1个|2022年1月1日|无|-1人|
| 第二章|2022年2月1日|无|-1人|
| 三个|2022年3月1日|无|-1人|
| 1个|2022年4月1日|1个|三个|
| 第二章|2022年5月1日|1个|三个|
| 第二章|2022年6月1日|第二章|1个|
有没有比简单的for循环更有效的方法呢?

vh0rcniy

vh0rcniy1#

IIUC,您可以:

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

g = df.groupby('Type')['Date']
df['Previous count'] = g.cumcount()
df['Days since latest previous'] = g.diff().fillna('-1').dt.days

输出:

Type       Date  Previous count  Days since latest previous
0     1 2022-01-01               0                          -1
1     2 2022-01-02               0                          -1
2     3 2022-01-03               0                          -1
3     1 2022-01-04               1                           3
4     2 2022-01-05               1                           3
5     2 2022-01-06               2                           1
  • 注意,这里假设输入按日期排序 *
lyr7nygr

lyr7nygr2#

gg1=df1.assign(Date=pd.to_datetime(df1.Date,format="%d/%M/%Y")).groupby('Type',sort=False)

col1=gg1.cumcount()
col2=gg1.Date.diff().dt.days.fillna(-1).astype(int)
df1.assign(**{"Previous count":col1,"Days since latest previous":col2})

出局

Type        Date  Previous count  Days since latest previous
0     1  01/01/2022               0                          -1
1     2  02/01/2022               0                          -1
2     3  03/01/2022               0                          -1
3     1  04/01/2022               1                           3
4     2  05/01/2022               1                           3
5     2  06/01/2022               2                           1

相关问题