(熊猫)基于groupby对象中的第一个元素创建新列

横谷

说我有以下数据框:

>>> 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫-基于列中第一个字母的GroupBy值

基于groupby Python的第一个和最后一个值的条件创建一个新列

熊猫根据现有列的第一个唯一值创建新列

在大熊猫的日期级别基于groupby date time列创建一个新列

熊猫:与组中第一个元素的区别

根据当前数组中每个项目的第一个元素创建新数组

替换熊猫列中的第一个单词

从熊猫中的GroupBy对象创建一个新的数据框

遍历一个数据框中的单个列与另一个数据框中的列进行比较使用熊猫在第一个数据框中创建新列

从split()的第一个值在DF中创建新列

如果第一个字母是R中的特定字母,则创建新列

创建对象后,创建新对象会更改第一个对象的字段

如何使用R基于长格式数据中列中第一个零的位置创建新的分类变量?

保留 DataFrame 中列的第一个元素

在熊猫中创建一个基于频率的类别的新列

基于熊猫数据框中的两列值创建一个新的数据框

使用其他列的元素在熊猫中创建一个新列

识别由熊猫中的多个列组成的组中的第一个非零元素

熊猫强迫列基于第一个`k`分隔符字符串

如何只考虑熊猫对象中元组的第一个元素

按索引选择groupby对象的第一个元素而不转换为列表

用熊猫标记每列中的第一个非零元素

熊猫从组中获取列的第一个和最后一个值

根据熊猫中的第一个和最后一个逗号分隔列

创建一个新数组,其中包含原始数组中位于第一个负元素之前的所有元素

从列表中创建一个数组,其中数组的第一个元素是列表中的第一个元素

将 groupby 的第一个元素分配给列产生 NaN

如何在 Scala/Spark 中忽略 Groupby 中的第一个元素?

熊猫将新列的第一个元素设置为列表(可迭代)引发ValueError:设置具有序列的数组元素