pandas - (pandas) 根据 groupby 对象中的第一个元素创建新列

标签 pandas

假设我有以下数据框:

>>> df = pd.DataFrame({'Person': ['bob', 'jim', 'joe', 'bob', 'jim', 'joe'], 'Color':['blue', 'green', 'orange', 'yellow', 'pink', 'purple']})
>>> df

    Color Person
0    blue    bob
1   green    jim
2  orange    joe
3  yellow    bob
4    pink    jim
5  purple    joe

我想创建一个新列,代表每个人看到的第一种颜色:
     Color Person First Color
0    blue    bob        blue
1   green    jim       green
2  orange    joe      orange
3  yellow    bob        blue
4    pink    jim       green
5  purple    joe      orange

我找到了一个解决方案,但似乎效率很低:
>>> df['First Color'] = 0
>>> groups = df.groupby(['Person'])['Color']
>>> for g in groups:
...    first_color = g[1].iloc[0]
...    df['First Color'].loc[df['Person']==g[0]] = first_color

是否有一种更快的方法可以一次完成所有这些操作,而不必遍历 groupby 对象?

最佳答案

你需要 transform first :

print (df.groupby('Person')['Color'].transform('first'))
0      blue
1     green
2    orange
3      blue
4     green
5    orange
Name: Color, dtype: object

df['First_Col'] = df.groupby('Person')['Color'].transform('first')
print (df)
    Color Person First_Col
0    blue    bob      blue
1   green    jim     green
2  orange    joe    orange
3  yellow    bob      blue
4    pink    jim     green
5  purple    joe    orange

关于pandas - (pandas) 根据 groupby 对象中的第一个元素创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42613885/

相关文章:

python - 在 Pandas 中创建虚拟变量而不进行复制

Python pandas - 提取和替换

python - Pandas:删除列级别并合并标题

python:使用 scikit-learn 构建带权重的矩阵

python - 对除 pandas 中的一列以外的所有列应用标准化

python - 如何使用一行在 Pandas 中选择范围

Python测试字符串是否有 "%"并且不让它中断

python - 将字典转换为可以转换的 float

python-3.x - 删除 Pandas 数据框中的小数列

python - Matplotlib/Pandas 中条形图的优化