【问题标题】:Iterating over a data frame, creating a dictionary based on values遍历数据框,根据值创建字典
【发布时间】:2018-12-24 06:07:30
【问题描述】:

我正在尝试遍历 pandas 中的数据框并根据列中的值生成字典。我有兴趣在每次列中的值等于 3 时捕获列名。给定下面的数据框:

Sample         Variable 1    Variable 2    Variable 3
Sample 1          1                3             1
Sample 2          3                0             3
Sample 3          3                3             3
Sample 4          2                1             3

我有兴趣创建一本给我的字典:

{'Sample 1': [Variable 2], 'Sample 2': [Variable 1, Variable3], 'Sample 3': [Variable 1, Variable 2, Variable 3], 'Sample 4': [Variable3]}

【问题讨论】:

    标签: python pandas dictionary dataframe iteration


    【解决方案1】:

    设置

    df = pd.DataFrame({'Sample': ['Sample 1', 'Sample 2', 'Sample 3', 'Sample 4'], 'Variable 1': [1,3,3,2], 'Variable 2': [3,0,3,1], 'Variable 3': [1,3,3,3]})
    

    set_index 与 unstack:

    s = df.set_index('Sample').unstack().reset_index()
    

    然后是groupby和apply,最后是to_dict:

    s[s[0].eq(3)].groupby('Sample')['level_0'].apply(list).to_dict()
    
    {'Sample 1': ['Variable 2'],
     'Sample 2': ['Variable 1', 'Variable 3'],
     'Sample 3': ['Variable 1', 'Variable 2', 'Variable 3'],
     'Sample 4': ['Variable 3']}
    

    【讨论】:

      【解决方案2】:

      您可以通过将 DataFrame 转换为 dict 来做到这一点,然后应用字典推导来获得等于 3 的变量列表。

      df_dict = df.to_dict(orient="index")
      {k: [k1 for (k1, v1) in v.items() if v1 == 3] for (k, v) in df_dict.items()}
      

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 1970-01-01
        • 2019-08-18
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 2019-08-06
        • 2015-10-31
        • 1970-01-01
        相关资源
        最近更新 更多