【问题标题】:Iterate and compare values through a dataframe通过数据框迭代和比较值
【发布时间】:2014-03-27 11:48:16
【问题描述】:

我有一个看起来像这样的数据框:

coperal      EXEC_FULLNAME    GVKEY   YEAR                               
5623         David P. Storch   1004   1992
5623         David P. Storch   1004   1993
5623         David P. Storch   1004   1994
5623         David P. Storch   1004   1995
5623         David P. Storch   1004   1996
5623         David P. Storch   1004   1997
5623         David P. Storch   1004   1998
5623         David P. Storch   1004   1999
5623         David P. Storch   1004   2000
5623         David P. Storch   1004   2001

我正在尝试查找 GVKEY 与上一行相同但 EXEC_FULLNAME 与上一行不同的元素。我可能会添加一个新的列名 FLAG,如果找到了,那么该行的 FLAG 值为 1,如果没有,则 FLAG 值为 0。

谁能帮我解决这个问题?

非常感谢!

【问题讨论】:

  • “与最后一行相同”是指“与上一行相同”还是“与最后一行相同”?
  • 对不起,我没有说清楚,和上一行一样

标签: python pandas


【解决方案1】:

您可以使用shift 将您的数据向上或向下移动一行。所以df.shift 将在第一行有一个NaN,否则你的数据会向下移动一行。

所以如果你的原始框架是df:

first_condition = df['GVKEY'] == df['GVKEY'].shift()
second_condition = df['EXEC_FULLNAME'] !=  df['EXEC_FULLNAME'].shift()
df['FLAG'] = first_condition & second_condition

将为您提供TrueFalse 的列。如果你真的更喜欢1's 和0's,请将最后一行替换为:

df['FLAG'] = np.where(first_condition & second_condition, 1, 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2021-12-12
    相关资源
    最近更新 更多