【问题标题】:How to convert Dataframe into Series?如何将数据框转换为系列?
【发布时间】:2019-04-18 10:54:57
【问题描述】:

我想将 N 列转换为一个系列。如何有效地做到这一点?

输入:

    0   1   2   3
0  64  98  47  58
1  80  94  81  46
2  18  43  79  84
3  57  35  81  31

预期输出:

0     64
1     80
2     18
3     57
4     98
5     94
6     43
7     35
8     47
9     81
10    79
11    81
12    58
13    46
14    84
15    31
dtype: int64

到目前为止我尝试过:

print df[0].append(df[1]).append(df[2]).append(df[3]).reset_index(drop=True)

我对我的解决方案不满意,而且它不适用于动态列。请帮助我找到更好的方法。

【问题讨论】:

    标签: python pandas dataframe series


    【解决方案1】:

    你需要np.flatten

    pd.Series(df.values.flatten(order='F'))
    
    out[]
    0     64
    1     80
    2     18
    3     57
    4     98
    5     94
    6     43
    7     35
    8     47
    9     81
    10    79
    11    81
    12    58
    13    46
    14    84
    15    31
    dtype: int64
    

    【讨论】:

      【解决方案2】:

      你可以使用unstack

      pd.Series(df.unstack().values)
      

      【讨论】:

        【解决方案3】:

        这是另一个简短的。

        >>> pd.Series(df.values.ravel(order='F'))                                                                                                               
        >>> 
        0     64
        1     80
        2     18
        3     57
        4     98
        5     94
        6     43
        7     35
        8     47
        9     81
        10    79
        11    81
        12    58
        13    46
        14    84
        15    31
        dtype: int64
        

        【讨论】:

          【解决方案4】:

          你也可以使用Series类和.values属性:

          pd.Series(df.values.T.flatten())
          

          输出:

          0     64
          1     80
          2     18
          3     57
          4     98
          5     94
          6     43
          7     35
          8     47
          9     81
          10    79
          11    81
          12    58
          13    46
          14    84
          15    31
          dtype: int64
          

          【讨论】:

            【解决方案5】:

            使用pd.melt() -

            df.melt()['value']
            

            输出

            0     64
            1     80
            2     18
            3     57
            4     98
            5     94
            6     43
            7     35
            8     47
            9     81
            10    79
            11    81
            12    58
            13    46
            14    84
            15    31
            Name: value, dtype: int64
            

            【讨论】:

              【解决方案6】:
              df.T.stack().reset_index(drop=True)
              

              输出:

              0     64
              1     80
              2     18
              3     57
              4     98
              5     94
              6     43
              7     35
              8     47
              9     81
              10    79
              11    81
              12    58
              13    46
              14    84
              15    31
              dtype: int64
              

              【讨论】:

                猜你喜欢
                • 2019-05-16
                • 2023-03-10
                • 1970-01-01
                • 2019-02-19
                • 2016-01-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多