gpt4 book ai didi

r - 分组并按 Pandas 中的最大值过滤

转载 作者:行者123 更新时间:2023-12-05 01:52:23 24 4
gpt4 key购买 nike

我正在处理如下所示的数据框:(在编辑中添加了 ID 2)

+-------+----+------+------+
| Value | ID | Date | ID 2 |
+-------+----+------+------+
| 1 | 5 | 2012 | 111 |
| 1 | 5 | 2013 | 112 |
| 0 | 12 | 2017 | 113 |
| 0 | 12 | 2022 | 114 |
| 1 | 27 | 2005 | 115 |
| 1 | 27 | 2011 | 116 |
+-------+----+------+-----+

仅使用带有“Value”==“1”(“value is boolean”)的行,我想按 ID 对数据框进行分组并将字符串“latest”输入到新的(空白)列,给出以下输出:

+-------+----+------+--------+
| Value | ID | Date | Latest |
+-------+----+------+--------+
| 1 | 5 | 2012 | |
| 1 | 5 | 2013 | Latest |
| 0 | 12 | 2017 | |
| 0 | 12 | 2022 | |
| 1 | 27 | 2005 | |
| 1 | 27 | 2011 | Latest |
+-------+----+------+--------+

pandas 的语法让我很反感,因为我对 Python 还很陌生。

在 R 中我想我会尝试类似的东西

df %>% select(Value == "1") %>% group_by(ID) %>% select(max(Date)

但我不确定 Pandas 中的语法......我试图通过使用首先选择满足“value == 1”条件的行子集

q = df.query('Value == 1')
my_query_index = q.index
my_query_index

这会返回所有行的索引,但我不确定如何在按 max(date) 分组和过滤之前将其合并到数据框中。

感谢所有帮助。谢谢。

编辑:我使用固定答案如下:

latest = df.query('Value==1').groupby("ID").max("Year").assign(Latest = "Latest")
df = pd.merge(df,latest,how="outer")
df

但我已经意识到一些最大年份是相同的,即可能有 4 行,最大年份都是 2017 年。对于决胜局,我需要在组内使用最大 ID 2。我已将 .groupby("ID 2").max("ID 2") 添加到代码行,给出

latest = df.query('Value==1').groupby("ID").max("Year").groupby("ID 2").max("ID 2").assign(Latest = "Latest")
df = pd.merge(df,latest,how="outer")
df

但它给了我一个与我想要的完全不同的数据框。

感谢您的帮助,不胜感激。

最佳答案

你可以这样做:

latest = df.query('Value==1').groupby("ID").max("year").assign(Latest = "Latest")
pd.merge(df,latest,how="outer")

Value ID Date Latest
0 1 5 2012 NaN
1 1 5 2013 Latest
2 0 12 2017 NaN
3 0 12 2022 NaN
4 1 27 2005 NaN
5 1 27 2011 Latest

关于r - 分组并按 Pandas 中的最大值过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71591106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com