熊猫-获得多个最大值

黄道带645

我有一个数据框看起来像这样:

indx   user_id     type        date
0      123          A Level-1  2021-01-15
1      123          A Level-1  2021-01-10
2      123          A Level-2  2021-01-10
3      123          B Level-2  2021-01-11
4      123          not_ctrgzd 2021-01-10
5      124          A Level-2  2021-02-11
6      124          B Level-1  2021-01-21
7      124          B Level-1+ 2021-02-11
8      125          not_ctrgzd 2021-01-31
9      126          A Level-1  2021-02-02
...

我需要为每种唯一类型获取具有最新日期的行,即

indx   user_id     type        date
0      123          A Level-1  2021-01-15
2      123          A Level-2  2021-01-10
3      123          B Level-2  2021-01-11
4      123          not_ctrgzd 2021-01-10
5      124          A Level-2  2021-02-11
6      124          B Level-1  2021-01-21
7      124          B Level-1+ 2021-02-11
8      125          not_ctrgzd 2021-01-31
9      126          A Level-1  2021-02-02

然后下面的代码块这样做

idx = df.groupby(['user_id','type'])['date'].transform(max) == df['date']
df[idx]

现在,我不能为每种类型(等)获取具有最大类型值的行AB以便最终,数据帧看起来像这样。

indx   user_id     type        date
2      123          A Level-2  2021-01-10
3      123          B Level-2  2021-01-11
4      123          not_ctrgzd 2021-01-10
5      124          A Level-2  2021-02-11
7      124          B Level-1+ 2021-02-11
8      125          not_ctrgzd 2021-01-31
9      126          A Level-1  2021-02-02

因为B Level-1 +大于B Level-1,而A Level-2大于A Level-1,依此类推。请注意,某些行没有归类的type(no_ctgrzd),无论如何都不应将其包括在最终数据框中。请不要犹豫,更正标题看起来不合理的任何部分:)。谢谢!

斯科特·波士顿

您可以使用pd.CategoricalDtype这样:

#Create a catoregy and order for type
catTypeDtype = pd.CategoricalDtype(['1','1+','2'], ordered=True)

#Split the type into two helper columns to sort on category
df[['t1','t2']] = df['type'].str.extract('(?P<t1>[AB]|(?:.*))(?P<t2>.*)')

#change dtype from string to categorical
df['t2'] = df['t2'].astype(catTypeDtype)

#Sort dataframe on categorical data and date
dfs = df.sort_values(['t2','date'], ascending=[False, False])

#Groupby and take the first record after sorting
df_out = dfs.groupby(['user_id','t1'], group_keys=False, as_index=False).first()\
            .drop(['t1','t2'], axis=1)

df_out 

输出:

   user_id  indx        type        date
0      123     2          A2  2021-01-10
1      123     3          B2  2021-01-11
2      123     4  not_ctrgzd  2021-01-10
3      124     5          A2  2021-02-11
4      124     6          B2  2021-01-21
5      125     8  not_ctrgzd  2021-01-31
6      126     9          A1  2021-02-02

用新数据更新

catTypeDtype = pd.CategoricalDtype(['1','1+','2'], ordered=True)

df[['t1','t2']] = df['type'].str.extract('(?P<t1>[AB]|(?:.*))(?:\sLevel-)?(?P<t2>.*)')
# df

df['t2'] = df['t2'].astype(catTypeDtype)

dfs = df.sort_values(['t2','date'], ascending=[False, False])

df_out = dfs.groupby(['user_id','t1'], group_keys=False, as_index=False).first()\
            .drop(['t1','t2'], axis=1)

输出:

   user_id  indx        type        date
0      123     2   A Level-2  2021-01-10
1      123     3   B Level-2  2021-01-11
2      123     4  not_ctrgzd  2021-01-10
3      124     5   A Level-2  2021-02-11
4      124     7  B Level-1+  2021-02-11
5      125     8  not_ctrgzd  2021-01-31
6      126     9   A Level-1  2021-02-02

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得多列熊猫分组的最大值?

来自分类Dev

熊猫通过两列分组并获得最大值

来自分类Dev

熊猫-df.max(),多个最大值

来自分类Dev

从熊猫中的多个对象获取最大值.max()

来自分类Dev

熊猫数据框通过绝对值优化获得最大值和最小值

来自分类Dev

如何从多个熊猫图中获得多个图例

来自分类Dev

如何从多个熊猫图中获得多个图例

来自分类Dev

在熊猫列中查找最大值

来自分类Dev

熊猫数据透视表最大值

来自分类Dev

熊猫中最大值的列标签

来自分类Dev

熊猫滚动最小最大值

来自分类Dev

熊猫系列成对最大值

来自分类Dev

在熊猫数据框的分组依据中获得唯一计数和最大值

来自分类Dev

熊猫创建新的数据框,从多个观测值中选择最大值

来自分类Dev

如何在熊猫数据框的多个列中最小/最大值?

来自分类Dev

如何在python词典中获得多个最大值?

来自分类Dev

熊猫的最大值和最小值

来自分类Dev

Groupby用那里的最大值熊猫替换值

来自分类Dev

根据列中的最大值过滤数据框-熊猫

来自分类Dev

熊猫在groupby中找到最大值并应用函数

来自分类Dev

熊猫-查找多层数据框的最大值

来自分类Dev

在分区中为熊猫数据框选择最大值

来自分类Dev

熊猫:每行最大值的矢量化运算

来自分类Dev

熊猫:求解时间序列数据集的最大值阈值

来自分类Dev

熊猫数据框str拆分最大值

来自分类Dev

计算的熊猫列的最大值和0

来自分类Dev

熊猫在指定索引groupby之后找到最大值

来自分类Dev

熊猫DataFrame获取列组合最大值

来自分类Dev

熊猫-查找多层数据框的最大值