【问题标题】:pandas mapping one key to multiple valuespandas 将一个键映射到多个值
【发布时间】:2021-09-11 18:24:17
【问题描述】:

我有一个看起来像这样的数据框

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。映射表:

activityCode activityName
01 Swimming
02 Swimming and football
03 Running
04 Football

我希望输出是

    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,以便创建具有不同activityName 但在02 的所有其他列中相同的两行?感谢您的宝贵时间!

【问题讨论】:

  • 只有活动02 需要拆分还是其他活动?我们可以在and 上拆分还是在'swimming and diving' 上不应该拆分?

标签: python pandas dictionary mapping


【解决方案1】:

您只需要分解activityName 列。

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

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

【讨论】:

    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2021-11-25
    • 2019-10-07
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多