首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫在群内创建序号增值栏

熊猫在群内创建序号增值栏
EN

Stack Overflow用户
提问于 2016-04-28 23:14:51
回答 3查看 2K关注 0票数 3

我有一个dataframe 'df‘,它包括:

代码语言:javascript
复制
col1 = datetime[64]
col2 = object
col3 = object
col4 = object

我想按“col1”对数据进行排序。那么我想按'col2‘分组。最后,我想在该分组中创建一个序数值(1,2,3),按“col2”进行排序,并按“col1”排序。如果按“col2”分组中有4行,则在这个新列中,这些行的值将为1,2,3,4。

我知道熊猫有“等级”,我可以用

代码语言:javascript
复制
df['newcol'] = df.groupby(['col2'])['col1'].rank()

但是这并不能给出原始的dataframe列,它的序号值只有1,2,3在分组中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-29 00:31:17

你想要实现这样的目标吗?如果没有样本数据和期望的结果,就很难判断。

代码语言:javascript
复制
random.seed(0)
df = pd.DataFrame({col: [random.choice(list('abc')) for i in range(10)] for col in list('ABC')})
df['timestamp'] = pd.date_range('2016-1-1', periods=len(df))

df.sort_values('timestamp', inplace=True)
df['rank'] = \
    df.groupby('A')['B'].transform(lambda group: group.astype('category').cat.codes + 1)

>>> df
   A  B  C  timestamp rank
0  c  c  a 2016-01-01    2
1  c  b  c 2016-01-02    1
2  b  a  c 2016-01-03    1
3  a  c  c 2016-01-04    1
4  b  b  b 2016-01-05    2
5  b  a  a 2016-01-06    1
6  c  c  b 2016-01-07    2
7  a  c  b 2016-01-08    1
8  b  c  c 2016-01-09    3
9  b  c  c 2016-01-10    3
票数 2
EN

Stack Overflow用户

发布于 2016-04-28 23:19:58

试着用这个:

代码语言:javascript
复制
>> df.sort_values(by='col1').groupby('col2')

这将首先按照col1对DF进行排序,然后按col2进行分组。结果将是一个GroupBy对象。

如果还希望在每个组中有行数,则可以尝试如下:

代码语言:javascript
复制
>> grouped = df.sort_values(by='col1').groupby('col2')
>> grouped.count()

我希望这能帮到你!

票数 0
EN

Stack Overflow用户

发布于 2020-01-14 05:30:40

有一种熊猫groupby方法可以做OP想要做的事情(我认为):

代码语言:javascript
复制
df.sort_values("col1", inplace = True)
df["rank"] = df.groupby("col2").cumcount() + 1

不过,在这里使用MultiIndex可能更有用:

代码语言:javascript
复制
df.set_index(["col1", "col2"], inplace = True)
df["rank"] = df.groupby(level = "col2").cumcount() + 1

为了使事情变得更漂亮(按"col2“和”col1“排序的行):

代码语言:javascript
复制
df.sort_values(by=["col2", "col1"], inplace = True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36927013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档