pandas 将一个键映射到多个值
pandas mapping one key to multiple values
我有一个看起来像这样的数据框
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 并创建一个 table,其中 pts 在学生和 activityCode 级别聚合。但比较棘手的是02对应的是swimming and football
。映射 table:
活动代码
活动名称
01
游泳
02
游泳和足球
03
运行
04
足球
我希望输出为
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 列中得到了一行 ['Swimming', 'Football'] 而不是两行。
0 [Swimming, Football]
1 Swimming
2 Running
3 Football
我应该如何编写代码来映射 activityCode
,以便为 02 创建具有不同 activityName
但在所有其他列中相同的两行?感谢您的宝贵时间!
您只需展开 activityName
列。
df['activityName'] = df['activityCode'].map({'01': 'Swimming', '02':['Swimming', 'Football'], '03':'Running', '04':'Football'})
df.explode('activityName')
这将 return 一个 DataFrame,其中,对于 activityName
中的任何列表单元格,行数将与该列表中的元素一样多,每个元素一个,其他行中的值与其在原始行中的值相同。对于 activityName
值不是列表的任何行,它们将按原样存在于新的 DataFrame 中。
我有一个看起来像这样的数据框
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 并创建一个 table,其中 pts 在学生和 activityCode 级别聚合。但比较棘手的是02对应的是swimming and football
。映射 table:
活动代码 | 活动名称 |
---|---|
01 | 游泳 |
02 | 游泳和足球 |
03 | 运行 |
04 | 足球 |
我希望输出为
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 列中得到了一行 ['Swimming', 'Football'] 而不是两行。
0 [Swimming, Football]
1 Swimming
2 Running
3 Football
我应该如何编写代码来映射 activityCode
,以便为 02 创建具有不同 activityName
但在所有其他列中相同的两行?感谢您的宝贵时间!
您只需展开 activityName
列。
df['activityName'] = df['activityCode'].map({'01': 'Swimming', '02':['Swimming', 'Football'], '03':'Running', '04':'Football'})
df.explode('activityName')
这将 return 一个 DataFrame,其中,对于 activityName
中的任何列表单元格,行数将与该列表中的元素一样多,每个元素一个,其他行中的值与其在原始行中的值相同。对于 activityName
值不是列表的任何行,它们将按原样存在于新的 DataFrame 中。