【问题标题】:Python - Pandas: select first observation per groupPython - Pandas:选择每组的第一个观察值
【发布时间】:2014-02-06 00:03:21
【问题描述】:

我想使用 dataframe 框架将我以前的 SAS 代码改编为 Python。 在 SAS 中,我经常使用这种类型的代码(假设列按 group_id 排序,其中 group_id 取值 1 到 10,其中每个 group_id 有多个观察值):

data want;set have;
by group_id;
if first.group_id then c=1; else c=0;
run;

所以这里发生的事情是,我为每个 id 选择第一个观察值,并创建一个新变量 c,它的值为 10 为其他值。数据集如下所示:

group_id c
1        1  
1        0
1        0
2        1
2        0
2        0
3        1
3        0
3        0

如何在 Python 中使用 dataframe 执行此操作?假设我只从group_id 向量开始。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果您使用的是 0.13+,则可以使用 cumcount groupby 方法:

    In [11]: df
    Out[11]: 
       group_id
    0         1
    1         1
    2         1
    3         2
    4         2
    5         2
    6         3
    7         3
    8         3
    
    In [12]: df.groupby('group_id').cumcount() == 0
    Out[12]: 
    0     True
    1    False
    2    False
    3     True
    4    False
    5    False
    6     True
    7    False
    8    False
    dtype: bool
    

    您可以强制 dtype 为 int 而不是 bool:

    In [13]: df['c'] = (df.groupby('group_id').cumcount() == 0).astype(int)
    

    【讨论】:

    • 好的,谢谢,应该可以了...我必须安装 0.13。
    • 如果没有 0.13 只熊猫可以做到这一点吗?我很难安装 0.13...谢谢
    • @CharlesM 没那么容易。安装似乎有什么问题?你使用的是 pip 还是 anaconda?
    • 用 pip pip install pandas==0.13 不会更新。我有这个错误InstallationError: Command C:\Python27\WinPython-64bit-2.7.5.3\python-2.7.5.amd64\python.exe -c "import setuptools;__file__='c:\\users\\chamar.stu\\appdata\\local\\temp\\pip_build_chamar.stu\\pandas\\setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\chamar.stu\appdata\local\temp\pip-lnk0ul-record\install-record.txt --single-version-externally-managed failed with error code 1 in c:\users\chamar.stu\appdata\local\temp\pip_build_chamar.stu\pandas
    • 您是如何安装早期版本的 pandas 的?可能值得将此作为一个单独的问题提出。我推荐anaconda。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多