python数据框在没有循环的情况下每组应用函数

Posted

技术标签:

【中文标题】python数据框在没有循环的情况下每组应用函数【英文标题】:python dataframe what apply function per group withouth loop 【发布时间】:2020-07-23 08:54:33 【问题描述】:

我有一个数据框

df = 
type value
 A     5
 A     7
 B     2
 B     6
 A     1

我要根据 type 列的组应用函数,因此排名将适用于每种类型,新的 df 将是

df = 
type value rank
 A     5    1
 A     7    0
 B     2    1
 B     6    0
 A     1    2

【问题讨论】:

这些答案有帮助吗?不要忘记您可以投票并接受答案。见What should I do when someone answers my question?,谢谢! 【参考方案1】:

这可以通过sort_values 后跟groupby().cumcount() 来完成:

df['rank'] = df.sort_values('value', ascending=False).groupby('type').cumcount()

输出:

  type  value  rank
0    A      5     1
1    A      7     0
2    B      2     1
3    B      6     0
4    A      1     2

【讨论】:

如果我想应用另一个功能,例如 sklearn.preprocessing.StandardScaler ?【参考方案2】:

你可以使用groupby.rank,设置ascending=False

df['rank'] = df.groupby('type').value.rank(ascending=False).sub(1).astype(int)

print(df)

  type  value rank
0    A      5    1
1    A      7    0
2    B      2    1
3    B      6    0
4    A      1    2

【讨论】:

如果我想应用另一个功能,例如 sklearn.preprocessing.StandardScaler ? 这是另一个问题@okuoub。我鼓励您为此提出一个新问题,并将这个问题限制在最初陈述的范围内。否则它也会让未来的读者感到困惑

以上是关于python数据框在没有循环的情况下每组应用函数的主要内容,如果未能解决你的问题,请参考以下文章

在数据框中循环函数

在没有 for 循环的情况下应用用户定义的函数

如果 ID 存在于其他数据框中,则 Python Pandas 数据框在新列中添加“1”

Python 3:在没有任何循环的情况下重新运行当前函数

Python迭代器

是否可以使用 django-background-task 将函数置于定时循环中