【问题标题】:Pandas list of tuples from two columns containing list [duplicate]来自包含列表的两列的 Pandas 元组列表 [重复]
【发布时间】:2021-07-27 22:24:10
【问题描述】:

我有一个像这样的 pandas 数据框,其中 device_namesdevice_models 都是列表

user_id, device_names, device_models
1, ["dev_1", "dev_2"], ["mod_1", "mod_2"]
2, ["dev_1", "dev_5"], ["mod_1", "mod_5"]

我想要两个合并这两列并创建一个像这样的另一列

user_id, device_names, device_models, dev_mod
1, ["dev_1", "dev_2"], ["mod_1", "mod_2"], [("dev_1", "mod_1"), ("dev_1", "mod_2")]
2, ["dev_1", "dev_5"], ["mod_1", "mod_5"], [("dev_1", "mod_1"), ("dev_5", "mod_5")] 

我已经尝试了简单的zip,它适用于普通列表,但不适用于熊猫系列。我如何在 pandas 中做到这一点?

【问题讨论】:

标签: python pandas


【解决方案1】:

带压缩的列表推导:

df["dev_mod"] = [list(zip(dev_name, dev_model))
                 for dev_name, dev_model in zip(df.device_names, df.device_models)]

得到

   user_id    device_names   device_models                           dev_mod
0        1  [dev_1, dev_2]  [mod_1, mod_2]  [(dev_1, mod_1), (dev_2, mod_2)]
1        2  [dev_1, dev_5]  [mod_1, mod_5]  [(dev_1, mod_1), (dev_5, mod_5)]

第二个zip 将两列粘合在一起,第一种转置以获得所需的结果。

【讨论】:

    【解决方案2】:

    你可以这样做:

    import pandas as pd
    df = pd.DataFrame({'user_id': {0: 1, 1: 2},
     'device_names': {0: ["dev_1","dev_2"], 1: ["dev_1","dev_5"]},
     'device_models': {0: ["mod_1","mod_2"], 1: ["mod_1","mod_5"]}})
    
    df['dev_mod'] = df.apply(lambda x: list(zip(x['device_names'], x['device_models'])), axis=1)
    

    输出:

       user_id    device_names   device_models                           dev_mod
    0        1  [dev_1, dev_2]  [mod_1, mod_2]  [(dev_1, mod_1), (dev_2, mod_2)]
    1        2  [dev_1, dev_5]  [mod_1, mod_5]  [(dev_1, mod_1), (dev_5, mod_5)]
    

    【讨论】:

    • 很好的答案,@Andreas! +1 应该比爆炸快得多。我更喜欢这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多