英文:
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')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论