将一个键映射到多个值

2024-09-30 06:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像这样的数据框

df = pd.DataFrame([[1, '02', 3], [2, '01', 5], [3, '03', 8], [4, '04', 1]], columns=['Student', 'activityCode', 'pts'])

    Student activityCode    pts
0   1   02  3
1   2   01  5
2   3   03  8
3   4   04  1

我想将activityCode映射到activityName,并创建一个表,其中包含在学生和activityCode级别聚合的pts。但棘手的是02对应于swimming and football。映射表:

^{tb1}$

我希望输出是

    Student activityName    pts
0   1   Swimming    3
1   1   Football    3
2   2   Swimming    5
3   3   Running     8
4   4   Football    1

我试过了

df['activityCode'].map({'01': 'Swimming', '02':['Swimming', 'Football'], '03':'Running', '04':'Football'})但是很明显,我在activityName列中得到了一行['sweeling','Football'],而不是两行

0    [Swimming, Football]
1                Swimming
2                 Running
3                Football

我应该如何编写代码来映射activityCode,以便它在02的所有其他列中创建具有不同activityName但相同的两行?谢谢你抽出时间


Tags: columns数据dataframedf级别runningstudent学生
1条回答
网友
1楼 · 发布于 2024-09-30 06:14:33

只需分解activityName

df['activityName'] = df['activityCode'].map({'01': 'Swimming', '02':['Swimming', 'Football'], '03':'Running', '04':'Football'})
df.explode('activityName')

这将返回一个数据帧,其中对于作为列表的activityName中的任何单元格,其行数与该列表中的元素数相同,每个元素一行,其他行中的值与其在原始行中的值相同。对于activityName值不是列表的任何行,它们将按原样存在于新的数据帧中

相关问题 更多 >

    热门问题