python - pandas 根据同一列的值设置列

标签 python pandas

我有以下数据框:

userid       date
  1        2010-01-03
  2        2009-01-04
  3        2004-02-03
  1        2007-01-01

我想创建一个列,如果另一行中存在另一个日期更早的类似用户 ID,则该列输出 true。即

userid       date        userid_seen
  1        2010-01-03        t
  2        2009-01-04        f
  3        2004-02-03        f
  1        2007-01-01        f  

我该怎么做?

最佳答案

这将通过调用 apply 并传递参数 axis=1 来按行应用它来工作:

In [88]:

def func(x):
    if len(df.loc[(df['userid'] == x.userid) & (df['date'] != x.date), 'date']) > 0:
        return (df.loc[(df['userid'] == x.userid) & (df['date'] != x.date), 'date'] < x.date).values.max()
    return False
df['user_id_seen'] = df.apply(lambda row: func(row), axis=1)
df
Out[88]:
   userid       date user_id_seen
0       1 2010-01-03         True
1       2 2009-01-04        False
2       3 2004-02-03        False
3       1 2007-01-01        False

更新

尽管上述方法有效,但对于大型数据帧来说,它会很慢,正如 @MattiJohn 正确指出的那样,因为这会有效地迭代每一行。

以下是与 @MattiJohn 的答案类似的更紧凑的答案:

In [102]:

df['user_id_seen'] = df.groupby('userid')['date'].transform('min') < df.date
df
Out[102]:
   userid       date user_id_seen
0       1 2010-01-03         True
1       2 2009-01-04        False
2       3 2004-02-03        False
3       1 2007-01-01        False

关于python - pandas 根据同一列的值设置列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24606734/

相关文章:

python - 将 Pandas DataFrame 转换为嵌套元组列表的快速方法

python - 按两列对行进行分组并通过比较过滤值

python - iloc 和 loc 有何不同?

python - Pandas :通过两个不同的维度创建数据透视表?

python - 如何将 scipy 与数组集成作为函数的一部分

python - 如何从 Tensorflow 排名系统的输出文件中获取分数?

Python Web 套接字仅发送 1 条消息

python - SQLAlchemy 和通行证库

python - 按日期和列名称匹配 2 个数据框以获取值

python - 如何根据列数据类型创建不同绘图组