微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

考虑这个

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,但这似乎太笨拙了…

解决方法:

我认为您可以将len(df)与range一起使用:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐