【问题标题】:Segregate and create dictionary from pandas dataframe从 pandas 数据框中分离和创建字典
【发布时间】:2018-07-14 20:28:17
【问题描述】:

我有一个如下的数据框,我想创建一个字典如下:

示例:

{'52.00,20.00': [1.5,4.1,3.6,3.1], '49.25,20.00': [0.5,2.1,1,2.1]}

即{'A,B的值': avg(A)的列表}

我是python pandas的新手,可以请人推荐吗?

+-----------+-----------+-----------------+----------------+
| A         | B         | avg(A)          | hour           |
+-----------+-----------+-----------------+----------------+
|     52.00 |     20.00 |             1.5 |              1 |
|     52.00 |     20.00 |             4.1 |             14 |
|     52.00 |     20.00 |             3.6 |             15 |
|     52.00 |     20.00 |             3.1 |             16 |
|     49.25 |     20.00 |             0.5 |              0 |
|     49.25 |     20.00 |             2.1 |              1 |
|     49.25 |     20.00 |               1 |             14 |
|     49.25 |     20.00 |             2.1 |             15 |
|     53.75 |     20.00 |            2.66 |             20 |
|     53.75 |     20.00 |            2.66 |             21 |
|     53.75 |     20.00 |            2.66 |             22 |
|     53.75 |     20.00 |            5.07 |             23 |
|     48.00 |     20.00 |            0.97 |              0 |
|     48.00 |     20.00 |            0.97 |              1 |
|     48.00 |     20.00 |            1.57 |             14 |
|     48.00 |     20.00 |            1.57 |             15 |

【问题讨论】:

    标签: python pandas dictionary dataframe pandas-groupby


    【解决方案1】:

    对于两列,您可以手动连接(以获得更好的性能),然后用作groupby + apply 操作的子句。

    df[['A', 'B']] = df[['A', 'B']].astype(str)
    df['avg(A)'].groupby(df['A'] + ',' + df['B']).apply(list).to_dict()
    
    {
        "48.0,20.0": [
            0.97,
            0.97,
            1.57,
            1.57
        ],
        "49.25,20.0": [
            0.5,
            2.1,
            1.0,
            2.1
        ],
        "52.0,20.0": [
            1.5,
            4.1,
            3.6,
            3.1
        ],
        "53.75,20.0": [
            2.66,
            2.66,
            2.66,
            5.07
        ]
    }
    

    对于多列(不仅仅是AB),您可以使用applystr.join 来创建一个逗号分隔的数字列,该列应该泛化到任意数量的列。

    c = ['A', 'B', ...]
    df['avg(A)'].groupby(df[c].astype(str).apply(','.join, 1)).apply(list).to_dict()
    

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-13
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多