首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序数据帧的行和更改其他行的值时出现的问题

排序数据帧的行和更改其他行的值时出现的问题
EN

Stack Overflow用户
提问于 2019-05-27 12:31:40
回答 1查看 35关注 0票数 1

我一直在研究一个dataframe,试图首先根据列的值对其进行排序。然后更改某些列的其他行的值。要对我正在做的列进行排序:

代码语言:javascript
复制
df['key'] = df['Direction'].apply(lambda x: x.split()[0])
# Take the second number to ensure the order is kept
df['key2'] = df['Direction'].apply(lambda x: x.split()[2])

class_determiner_df = df.sort_values(['key', 'key2'])

这可以按照预期的方式对列进行排序,这与我在这里提出的问题Sort the rows of a data frame有关。

然后,我得到了以下数据:

代码语言:javascript
复制
         Node               Feature Indicator  Scaled     Class    Direction
    0       0                    km        <=   0.181   class_4      0 -> 1 
    201   201                  gini         =   0.000   class_5    0 -> 202 
    1       1                   WPS        <=   0.074   class_5      1 -> 2 
    64     64                  gini         =   0.000   class_4     1 -> 65 
    10     10              funktion        <=   0.500   class_2    10 -> 11 
    17     17                  gini         =   0.000   class_5    10 -> 18 
    100   100                   SPW        <=   0.282   class_5  100 -> 101 
    101   101                  gini         =   0.000   class_5  100 -> 102 
    102   102              words_nb        <=   0.322   class_3  102 -> 103 
    123   123                  gini         =   0.496   class_2  102 -> 124 
    103   103              words_nb        <=   0.125   class_2  103 -> 104 
    104   104                  gini         =   0.000   class_2  103 -> 105 
    105   105                   SPW        <=   0.290   class_4  105 -> 106 
    106   106                  gini         =   0.000   class_4  105 -> 107 
    107   107              words_nb        <=   0.197   class_3  107 -> 108 
    116   116                  gini         =   0.000   class_4  107 -> 117 
    108   108                   SPW        <=   0.330   class_3  108 -> 109 
    109   109                  gini         =   0.000   class_3  108 -> 110 
    11     11           auftragnehm        <=   0.500   class_2    11 -> 12 
    16     16                  gini         =   0.000   class_2    11 -> 17 
    110   110             Comp_conj        <=   0.125   class_3  110 -> 111 
    115   115                  gini         =   0.000   class_4  110 -> 116 
    111   111              words_nb        <=   0.138   class_3  111 -> 112 
    112   112                  gini         =   0.000   class_3  111 -> 113 
    113   113           weird_words        <=   0.167   class_3  113 -> 114 
    114   114                  gini         =   0.000   class_3  113 -> 115 
    117   117              polarity        <=   0.175   class_2  117 -> 118 
    118   118                  gini         =   0.000   class_2  117 -> 119 
    119   119          Aux_Start_no        <=   0.500   class_3  119 -> 120 
    120   120                  gini         =   0.000   class_3  119 -> 121 
    ..    ...                   ...       ...     ...       ...          ...

然后,我试着使df‘’feature‘和df’‘value’每第二行等于上面的一行,df“指示器”等于‘above '>’‘.’

我使用以下方法来完成此操作,摘自以下答案:Adjust every other row of a data frame

代码语言:javascript
复制
 # Adjust every other row
class_determiner_df.loc[1::2, 'Feature'] = None
class_determiner_df.loc[1::2, 'Scaled'] = None
class_determiner_df.loc[1::2, 'Indicator'] = '>'
# fillna() method of DataFrame scans rows from top, and when it finds a python None value (equivalent to numpy.NaN) 
# it replaces the None value with the last significant value from the same column
class_determiner_df.fillna(method='ffill', inplace=True)

这将产生以下不正确的数据格式:

代码语言:javascript
复制
         Node             Feature Indicator  Scaled     Class    Direction
    0       0                  km        <=   0.181   class_4      0 -> 1 
    201   201                gini         =   0.000   class_5    0 -> 202 
    1       1                gini         >   0.000   class_5      1 -> 2 
    64     64                gini         =   0.000   class_4     1 -> 65 
    10     10                gini         >   0.000   class_2    10 -> 11 
    17     17                gini         =   0.000   class_5    10 -> 18 
    100   100                gini         >   0.000   class_5  100 -> 101 
    101   101                gini         =   0.000   class_5  100 -> 102 
    102   102                gini         >   0.000   class_3  102 -> 103 
    123   123                gini         =   0.496   class_2  102 -> 124 
    103   103                gini         >   0.496   class_2  103 -> 104 
    104   104                gini         =   0.000   class_2  103 -> 105 
    105   105                gini         >   0.000   class_4  105 -> 106 
    106   106                gini         =   0.000   class_4  105 -> 107 
    107   107                gini         >   0.000   class_3  107 -> 108 
    116   116                gini         =   0.000   class_4  107 -> 117 
    108   108                gini         >   0.000   class_3  108 -> 109 
    109   109                gini         =   0.000   class_3  108 -> 110 
    11     11                gini         >   0.000   class_2    11 -> 12 
    16     16                gini         =   0.000   class_2    11 -> 17 
    110   110                gini         >   0.000   class_3  110 -> 111 
    115   115                gini         =   0.000   class_4  110 -> 116 
    111   111                gini         >   0.000   class_3  111 -> 112 
    112   112                gini         =   0.000   class_3  111 -> 113 
    113   113                gini         >   0.000   class_3  113 -> 114 
    114   114                gini         =   0.000   class_3  113 -> 115 
    117   117                gini         >   0.000   class_2  117 -> 118 
    118   118                gini         =   0.000   class_2  117 -> 119 
    119   119                gini         >   0.000   class_3  119 -> 120 
    120   120                gini         =   0.000   class_3  119 -> 121 
    ..    ...                 ...       ...     ...       ...          ...

第二行“gini”替换了它之后的每一行,是否有更好的方法来确保dataframe看起来类似于:

代码语言:javascript
复制
        Node               Feature Indicator  Scaled     Class    Direction
    0       0                    km        <=   0.181   class_4      0 -> 1 
    201   201                    km         >   0.181   class_5    0 -> 202 
    1       1                   WPS        <=   0.074   class_5      1 -> 2 
    64     64                   WPS         >   0.074   class_4     1 -> 65 
    10     10              funktion        <=   0.500   class_2    10 -> 11 
    17     17              function         >   0.500   class_5    10 -> 18 
    100   100                   SPW        <=   0.282   class_5  100 -> 101 
    101   101                   SPW         >   0.282   class_5  100 -> 102 
    102   102              words_nb        <=   0.322   class_3  102 -> 103 
    123   123              words_nb         >   0.322   class_2  102 -> 124 
    105   105                   SPW        <=   0.290   class_4  105 -> 106 
    106   106                   SPW         >   0.290   class_4  105 -> 107 
    ...

我不太清楚为什么下面这些东西不起作用,因为这似乎是我所需要的

代码语言:javascript
复制
    class_determiner_df.loc[1::2, 'Feature'] = None
    class_determiner_df.loc[1::2, 'Scaled'] = None
    class_determiner_df.loc[1::2, 'Indicator'] = '>'
    # fillna() method of DataFrame scans rows from top, and when it finds a python None value (equivalent to numpy.NaN) 
    # it replaces the None value with the last significant value from the same column
    class_determiner_df.fillna(method='ffill', inplace=True)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 12:51:45

这是因为loc使用的是索引标签而不是位置。您可以使用DataFrame.reset_index轻松地修复这个问题:

代码语言:javascript
复制
class_determiner_df.reset_index(inplace=True, drop=True)

# Adjust every other row
class_determiner_df.loc[1::2, 'Feature'] = None
class_determiner_df.loc[1::2, 'Scaled'] = None
class_determiner_df.loc[1::2, 'Indicator'] = '>'
# fillna() method of DataFrame scans rows from top, and when it finds a python None value (equivalent to numpy.NaN) 
# it replaces the None value with the last significant value from the same column
class_determiner_df.fillna(method='ffill', inplace=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56326137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档