python - 在 Pandas 中,如何为组中的第 n 个观察创建一个变量 n?

标签 python pandas

考虑一下

df = pd.DataFrame({'B': ['a', 'a', 'b', 'b'], 'C': [1, 2, 6,2]})

df
Out[128]: 
   B  C
0  a  1
1  a  2
2  b  6
3  b  2

我想创建一个变量,该变量仅对应于每个 groupby('B') 组中按“C”排序后的观察顺序。

df.sort_values(['B','C'])
Out[129]: 
   B  C  order
0  a  1  1
1  a  2  2
3  b  2  1
2  b  6  2

我该怎么做?我正在考虑创建一个单独的列,并使用 cumsum 但这似乎太笨重了......

最佳答案

我认为你可以将 rangelen(df) 一起使用:

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 
                   'B': ['a', 'a', 'b'], 
                   'C': [5, 3, 2]})
print df
   A  B  C
0  1  a  5
1  2  a  3
2  3  b  2

df.sort_values(by='C', inplace=True)
#or without inplace
#df = df.sort_values(by='C')
print df
   A  B  C
2  3  b  2
1  2  a  3
0  1  a  5

df['order'] = range(1,len(df)+1) 
print df
   A  B  C  order
2  3  b  2      1
1  2  a  3      2
0  1  a  5      3

通过评论编辑:

我想你可以使用 groupbycumcount :

import pandas as pd

df = pd.DataFrame({'B': ['a', 'a', 'b', 'b'], 'C': [1, 2, 6,2]})

df.sort_values(['B','C'], inplace=True)
#or without inplace
#df = df.sort_values(['B','C'])

print df
   B  C
0  a  1
1  a  2
3  b  2
2  b  6

df['order'] = df.groupby('B', sort=False).cumcount() + 1
print df
   B  C  order
0  a  1      1
1  a  2      2
3  b  2      1
2  b  6      2

关于python - 在 Pandas 中,如何为组中的第 n 个观察创建一个变量 n?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36628277/

相关文章:

android - 使用android应用程序在树莓派上调用一个函数?

python - Pyqt 鼠标悬停在 QPushButton 上

python - 导入错误 : No module named 'setuptools.build_meta'

python - 从 groupby 和多重聚合中展平层次索引 pandas.DataFrame

python - 如何让 scrapy 跟随由 javascript 生成的 url?

python - Django Postgres 导入错误 : is the server running locally and accepting connections on Unix domain socket?

python - 如何通过唯一索引对 pandas 列求和,然后重置总和?

python - 在 python/pandas 中按月分组每日数据,而 firSTLy 按用户 id 分组

python - 使用 Python/Pandas 匹配样本对年度数据

python - 将 pandas groupby 值转换为 numpy 数组