Python-根据多个日期创建新列

标签 python python-3.x pandas dataframe

我有一个非常大的数据框。
我想根据其他列“userid”和“date”创建一个新列“结果”。
用户 ID 有两条或更多记录。

import pandas as pd
import numpy as np

userid = ['1','1','22','48','48','48','393','393','555','555'] 
date = ['11/01/2016','11/02/2016','11/05/2016','11/08/2016','12/02/2016','02/12/2017','02/22/2017','02/28/2017','12/15/2016','02/28/2017'] 
df1 = pd.DataFrame({"userid": userid, "date": date})

userid  date
  1   11/01/2016
  1   11/02/2016
 22   11/05/2016
 48   11/08/2016
 48   12/02/2016
 48   02/12/2017
393   02/22/2017
393   02/28/2017
555   12/15/2016
555   02/28/2017

这个新列“结果”中有两种类型的值。
'1':如果 userid 出现在 02/01/2017 之前、02/01/2017 或之后(两个条件都必须满足),则返回值是 '1'。
“0”:如果不满足上述条件,则该行应分配为“0”。

示例 1:userid 48 在 02/01/2017 之前出现两次,在 02/01/2017 之后出现一次。因此,userid 48 的结果列中的值应该为“1”,因为这两个条件都满足。
示例 2:userid 393 在我们的数据中出现两次,但在两条记录中其日期均在 02/01/2017 之后。因此,用户 ID 393 的结果列中的值应为“0”。

在这种情况下,我的输出数据帧将是:

userid     date   result
  1    11/01/2016   0
  1    11/02/2016   0
 22    11/05/2016   0
 48    11/08/2016   1
 48    12/02/2016   1
 48    02/12/2017   1
393    02/22/2017   0
393    02/28/2017   0
555    12/15/2016   1
555    02/28/2017   1

我不知道实现这一目标的最佳方法。
有人可以帮忙吗?提前致谢!

最佳答案

这应该可以解决问题

import pandas as pd
import numpy as np
import datetime

userid = ['1','1','22','48','48','48','393','393','555','555'] 
date = ['11/01/2016','11/02/2016','11/05/2016','11/08/2016','12/02/2016','02/12/2017','02/22/2017','02/28/2017','12/15/2016','02/28/2017'] 
df1 = pd.DataFrame({"userid": userid, "date": date})

# convert date type to datetime
df1['date'] = pd.to_datetime(df1['date'])

# define threshold date
dt = datetime.datetime(2017, 2, 1)

# logic
fn = lambda _: 1 if _.min()<dt and _.max()>=dt else 0
res = df1.groupby('userid')['date'].agg(fn).reset_index()
res.rename({'date':'result'}, axis=1, inplace=True)
df1.merge(res)

输出

userid     date   result
  1    11/01/2016   0
  1    11/02/2016   0
 22    11/05/2016   0
 48    11/08/2016   1
 48    12/02/2016   1
 48    02/12/2017   1
393    02/22/2017   0
393    02/28/2017   0
555    12/15/2016   1
555    02/28/2017   1

关于Python-根据多个日期创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60143607/

相关文章:

python - 在 Python 中将秒转换为毫秒/微秒

python - 可迭代解包和切片分配

python - 在 Python 3 中将字符串转换为字节的最佳方法?

python - 奇怪的额外循环

python - Pandas 在一定水平上洗牌

python - Pandas 不保存到 csv

python - Django 模板中的总计/小计

python - 如何在Python中调用Qt5中的UI类

python - 期望得到一个图,但只是用 Pandas 获取轴坐标

python - Loc Pandas DataFrames 在日期范围内