【问题标题】:How to pick a specific columns of header of even number only?如何仅选择偶数标题的特定列?
【发布时间】:2021-10-22 22:34:20
【问题描述】:

我想问一个关于如何调用仅包含偶数的特定列的问题。

关于我之前的问题:How to make all the rows data drop the similar data and multiplying float numbers

df2 =df['hlogUs_dB'].str.split('[,:]',expand = True)
df2 = data.drop(["0"])
df2
 0   1   2   3   4   5   6   7   8   9   ... 276 277 278 279 280 281 282 283 284 285
0   109 -3.4    110 -3.4    111 -3.4    112 -3.5    113 -3.5    ... 343 -4.3    344 -4.3    345 -4.2    346 -4.2    347 -4.2
1   109 -3.5    110 -3.5    111 -3.4    112 -3.4    113 -3.4    ... 343 -4.1    344 -4.2    345 -4.4    346 -4.4    347 -4.2
2   109 -3.7    110 -3.7    111 -3.8    112 -3.8    113 -3.8    ... 343 -4.2    344 -4.3    345 -4.3    346 -4.3    347 -4.3
3   109 -3.5    110 -3.6    111 -3.6    112 -3.6    113 -3.7    ... 343 -4.1    344 -4.1    345 -4.1    346 -4.1    347 -4.1
4   109 -3.7    110 -3.8    111 -3.8    112 -3.8    113 -3.8    ... 343 -4.2    344 -4.2    345 -4.2    346 -4.2    347 -4.3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
165 109 -5.2    110 -5.3    111 -5.5    112 -5.7    113 -5.9    ... 343 -5.4    344 -5.3    345 -5.2    346 -5.1    347 -5.1
166 109 -5.5    110 -5.6    111 -5.8    112 -6.1    113 -6.3    ... 343 -5.5    344 -5.4    345 -5.3    346 -5.2    347 -5.2
167 109 -6.0    110 -6.2    111 -6.4    112 -6.7    113 -7.1    ... 343 -4.9    344 -4.9    345 -4.9    346 -4.9    347 -4.9
168 109 -5.4    110 -5.5    111 -5.7    112 -5.9    113 -6.2    ... 343 -5.9    344 -5.7    345 -5.7    346 -5.6    347 -5.6
169 109 -5.9    110 -6.1    111 -6.4    112 -6.6    113 -7.0    ... 343 -5.7    344 -5.7    345 -5.7    346 -5.6    347 -5.6
170 rows × 286 columns

我的问题是如何在不使用手动输入列头的所有偶数的情况下调用偶数。

如:

df2[[0,2,4]]*= 2

我目前坚持在标题列上设置条件的想法。我只想叫偶数。我希望在这些问题上找到合适的解决方案。提前谢谢你。

【问题讨论】:

    标签: pandas dataframe conditional-statements


    【解决方案1】:

    我们可以根据模2为0(偶数)的所有列来选择:

    even_cols = df.columns[(df.columns % 2) == 0]
    

    even_cols:

    Int64Index([  0,   2,   4,   6,   8,  10,  12,  14,  16,  18,
                ...
                266, 268, 270, 272, 274, 276, 278, 280, 282, 284],
               dtype='int64', length=143)
    

    然后操作可以使用新创建的索引:

    df[even_cols] *= 2
    

    df:

         0    1    2    3    4    5    6    ...  279  280  281  282  283  284  285
    0    198   78  122   16  146    8  124  ...    8  102   61  168   52  148   25
    1     18   31   78   59   44   80  116  ...   75  124   51    4   96   38    7
    2    152   66  112    0  114   31  172  ...   18  186   19   84   29   36    0
    3     80   99  152   25   34   31  106  ...   59  190   33   68   31   66   83
    4    192   95   48   95  130   14    8  ...    6   74   79   40   46  198   65
    ..   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...
    165  170   58  110   75  196   11   50  ...   54   46   53  146   62   30   48
    166   54    8  148   25  174   40  114  ...    6  180   32   94   44  142   16
    167   42   48   48   31  126   60   86  ...   11  128   10  162   67  142   13
    168   54   37   70    2  128   38  134  ...   85  166   40  142   57   54   52
    169  164   41  146   40   64   44   28  ...   83   90   86  188   23   38   35
    

    如果我们需要每隔一列而不是基于数值的列,我们可以设置切片的步骤来创建列列表:

    every_other_column = df.columns[::2]
    df[every_other_column] *= 2
    

    或者直接修改DataFrame而不创建列列表:

    df.loc[:, ::2] *= 2
    

    示例数据帧:

    import numpy as np
    import pandas as pd
    
    np.random.seed(5)
    df = pd.DataFrame(np.random.randint(0, 100, (170, 286)))
    print(df)
    

    df:

         0    1    2    3    4    5    6    ...  279  280  281  282  283  284  285
    0     99   78   61   16   73    8   62  ...    8   51   61   84   52   74   25
    1      9   31   39   59   22   80   58  ...   75   62   51    2   96   19    7
    2     76   66   56    0   57   31   86  ...   18   93   19   42   29   18    0
    3     40   99   76   25   17   31   53  ...   59   95   33   34   31   33   83
    4     96   95   24   95   65   14    4  ...    6   37   79   20   46   99   65
    ..   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...
    165   85   58   55   75   98   11   25  ...   54   23   53   73   62   15   48
    166   27    8   74   25   87   40   57  ...    6   90   32   47   44   71   16
    167   21   48   24   31   63   60   43  ...   11   64   10   81   67   71   13
    168   27   37   35    2   64   38   67  ...   85   83   40   71   57   27   52
    169   82   41   73   40   32   44   14  ...   83   45   86   94   23   19   35
    

    【讨论】:

    • 感谢您对偶数列的精彩提示。正如所建议的那样,它就像我想到的@HenryEcker 一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多