Pandas将个体逻辑应用于群体

2024-04-25 01:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个熊猫数据框,看起来像:

day id  val
1-Jan   A   -5
2-Jan   A   -4
3-Jan   A   3
1-Jan   B   2
2-Jan   B   1
3-Jan   B   -5

如何添加一个新列,其中对于具有相同id的所有行,如果val在1-Jan为负,则所有行都为“Y”,如果不是,则为“N”?像这样:

day id  val neg_on_jan_1
1-Jan   A   -5  y
2-Jan   A   -4  y
3-Jan   A   3   y
1-Jan   B   2   n
2-Jan   B   1   n
3-Jan   B   -5  n

我已经看了groupby和apply lambda函数,但仍然觉得我遗漏了一些东西。我刚开始接触pandas,有SQL的背景,所以如果我的大脑仍然在思考行和Oracle分析函数,请原谅我:)


Tags: 数据lambda函数idpandassqlonval
1条回答
网友
1楼 · 发布于 2024-04-25 01:20:54

根据@Ami Tavory的建议包含map

gb = df.set_index(['day', 'id']).groupby(level='id')
s = gb.val.transform(lambda s: s.loc['1-Jan'].lt(0)).map({1: 'y', 0:'n'})
s

day    id
1-Jan  A     y
2-Jan  A     y
3-Jan  A     y
1-Jan  B     n
2-Jan  B     n
3-Jan  B     n
Name: val, dtype: object

df.merge(s.to_frame('neg_on_jan_1').reset_index())

enter image description here

相关问题 更多 >