【发布时间】:2019-04-27 00:29:56
【问题描述】:
我有这个熊猫数据框:
df = pd.DataFrame(
{
"col1": [1,1,2,3,3,3,4,5,5,5,5]
}
)
df
如果 col1 中的值不等于下一行中 col1 的值,我想添加另一列显示“last”。它应该是这样的:
到目前为止,如果 col1 中的值不等于下一行中 col1 的值,我可以创建一个包含 True 的列;否则为 False:
df["last_row"] = df["col1"].shift(-1)
df['last'] = df["col1"] != df["last_row"]
df = df.drop(["last_row"], axis=1)
df
现在是这样的
df["last_row"] = df["col1"].shift(-1)
df['last'] = "last" if df["col1"] != df["last_row"]
df = df.drop(["last_row"], axis=1)
df
会很好,但这显然是错误的语法。我怎样才能做到这一点?
最后,我还想添加数字来指示一个值在此之前出现了多少次,而最后一个值始终标记为“last”。它应该是这样的:
我不确定这是否是我发展的另一个步骤,或者这是否需要一种新的方法。我读到如果我想在修改值时循环遍历数组,我应该使用 apply()。但是,我不知道如何在其中包含条件。你能帮帮我吗?
非常感谢!
【问题讨论】:
-
对于它的价值,通常不建议在 Pandas 数据帧中混合类型(在这种情况下为字符串和 int)。这样你会损失很多性能。
-
对于第一部分,您已经很接近了,因为您已经构建了一个布尔系列。构造一个空列,现在你可以这样做:
df['last'][df['col1'] != df['last_row']] = 'last'.