我有一个Pandas 相框,我保存了一些夏令营学生体育活动的信息.每次访问,学生可以 Select 体育的有限选项(以下示例3个不同的学科).我的工作室是按照下面的方式组织的:

  • 名称
  • 访问年份或次数
  • 当年体育活动
  • 体育项目1
  • 体育2
  • sport 3 等等(如有需要)

更新之前的一些示例(实际上是输入rabrame)是

名称 Nr Activity Football Badminton Swimming
Mike 1  Football  0        0         0
Mike 2  Football  0        0         0
Mike 3  Badminton 0        0         0
Mike 4  Football  0        0         0
Mike 5  Swimming  0        0         0

更新后(我的输出)

名称 Nr Activity Football Badminton Swimming
Mike 1  Football  1        0         0
Mike 2  Football  2        0         0
Mike 3  Badminton 2        1         0
Mike 4  Football  3        1         0
Mike 5  Swimming  3        1         1

5年后,我知道迈克有3年的足球经验,1年的羽毛球和1年的游泳经验.但对我来说非常重要的是要知道,例如3年后,在训练营迈克有exactly年的足球活动和1年的羽毛球经验(和游泳的初始值为0,没有经验!). 这就是为什么我不能用df['Badminton'][df['Nr']==3]=1更新重要行的原因 我必须更新不仅1行,而且所有行与索引大于> .iloc[3]因为我想知道在第四和第五年迈克有确切1年的经验在羽毛球(成为在今年3)

推荐答案

您可以对Activity进行一次热编码,然后计算groupby.cumsum,最后将原始DataFrame计算为update:

df.update(pd.get_dummies(df['Activity']).groupby(df['Name']).cumsum())

更新df:

   Name  Nr   Activity  Football  Badminton  Swimming
0  Mike   1   Football         1          0         0
1  Mike   2   Football         2          0         0
2  Mike   3  Badminton         2          1         0
3  Mike   4   Football         3          1         0
4  Mike   5   Swimming         3          1         1

如果足球/羽毛球/游泳栏未预先存在,您可以join:

out = df.join(pd.get_dummies(df['Activity']).groupby(df['Name']).cumsum())

NB.如果你在一年中有几个活动(例如'Football|Badminton'个),你可以用df['Activity'].str.get_dummies()替换pd.get_dummies(df['Activity']).

Python相关问答推荐

Python中使用时区感知日期时间对象进行时间算术的Incredit

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

Django mysql图标不适用于小 case

标题:如何在Python中使用嵌套饼图可视化分层数据?

基于索引值的Pandas DataFrame条件填充

使用groupby方法移除公共子字符串

Python Pandas获取层次路径直到顶层管理

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

numpy.unique如何消除重复列?

如何将数据帧中的timedelta转换为datetime

在极点中读取、扫描和接收有什么不同?

为用户输入的整数查找根/幂整数对的Python练习

如何使用Azure Function将xlsb转换为xlsx?

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

如何防止html代码出现在quarto gfm报告中的pandas表之上

操作布尔值的Series时出现索引问题

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError

Pandas ,快速从词典栏中提取信息到新栏