如何在聚合操作中创建带有条件的计算列?

huangapple go评论65阅读模式
英文:

How can i create an calculate columns with condition on aggragate

问题

我尝试创建一个名为max_time的列,其中在rsvn 1行中,它将具有值2(rsvn 1的status == 'ss'的最大值),并且在rsvn 2行中,它将具有值6。

你可以用以下一行的pandas代码实现:

df['max_time'] = df.groupby('rsvn')['status'].transform(lambda x: x.eq('ss').max())

这将根据'rsvn'列进行分组,并使用lambda函数将每个组中'status'列等于'ss'的最大值赋给'max_time'列。

请注意,你需要将'df'替换为你实际使用的DataFrame名称。

英文:

I try to create a max_time columns which in row rsvn 1 will have value of 2 (max of status == 'ss' of rsvn 1) and in row rsvn 2 will have value 6.

How can i do that with 1 row of pandas code

如何在聚合操作中创建带有条件的计算列?

答案1

得分: 1

假设数据如下:

df = pd.DataFrame(
    {'rsvn': {0: 1, 1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 2, 7: 2},
     'status': {0: 'ss', 1: 'ss', 2: 'f', 3: 'f', 4: 'ss', 5: 'ss', 6: 'f', 7: 'f'},
     'time': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8}}
)

# 可以通过以下方式重新创建 max_time 列:
max_df = df[df['status'] == 'ss'].groupby('rsvn')['time'].max().rename('max_time').reset_index()
df.merge(max_df, on='rsvn', how='left')

这段代码的作用是根据条件筛选出 status 列为 'ss' 的行,然后按照 rsvn 进行分组,取出每组中的最大 time 值,并将其命名为 max_time。最后,将 max_df 与原始的 df 进行左连接(left join)。

英文:
# Assuming the data is like this:
df = pd.DataFrame(
    {'rsvn': {0: 1, 1: 1, 2: 1, 3: 1, 4: 2, 5: 2, 6: 2, 7: 2}, 
     'status': {0: 'ss', 1: 'ss', 2: 'f', 3: 'f', 4: 'ss', 5: 'ss', 6: 'f', 7: 'f'}, 
     'time': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8}}
)

# you can recreate the max_time column like this:
max_df = df[df['status'] == 'ss'].groupby('rsvn')['time'].max().rename('max_time').reset_index()
df.merge(max_df, on='rsvn', how = 'left')

huangapple
  • 本文由 发表于 2023年7月31日 18:11:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/76802601.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定