【问题标题】:Invert a single column in a DataFrame反转 DataFrame 中的单列
【发布时间】:2018-02-24 22:06:46
【问题描述】:

我确实有一个 DataFrame mxn,并希望以类似于列表翻转的方式翻转一列,例如:

list1 = [1,2,3,4]
list2 = list1[::1]

所以 list2 看起来像这样:[4,3,2,1]

如何将类似于 DataFrame 的内容应用于列,但保持所有行和其他列的顺序,因此我只翻转单列中的值:

例如

df1 =

    col1    col2
1    cat     1
2    dog     2
3    fish    3
4    bird    4
5    mouse   5

到 df2

    col1    col2
1    cat     5
2    dog     4
3    fish    3
4    bird    2
5    mouse   1

【问题讨论】:

  • df2 = df1.assign(col2=df1['col2'].iloc[::-1])
  • df1.assign(col2=df1.col2.loc[::-1].reset_index(drop=True)) 确实有效。如果您不重置索引,那么您最终可能会得到相同的数据帧。

标签: python list pandas dataframe


【解决方案1】:

尝试将此连接到您的数据框。

df1['col2'].loc[::-1]

它应该可以工作。

【讨论】:

    【解决方案2】:

    最简单的方法是:

    df.col2 = df.col2.values[::-1]
    df
    
        col1  col2
    1    cat     5
    2    dog     4
    3   fish     3
    4   bird     2
    5  mouse     1
    

    或者,使用df.assign(返回一个副本,效率不如就地赋值):

    df2 = df.assign(col2=df.col2.values[::-1])
    df2
    
        col1  col2
    1    cat     5
    2    dog     4
    3   fish     3
    4   bird     2
    5  mouse     1
    

    【讨论】:

    • 我使用了选项 1:df.col2 = df.col2.values[::-1] 并且有效。我想我不必重新设置索引?谢谢你的回答。
    • @BlueTomato 你当然不知道。没问题。
    【解决方案3】:

    你可以这样做:

    >>> df1
       0  1  2
    0  1  2  3
    1  4  5  6
    2  7  8  9
    >>> df1[0]=df1[0].loc[::-1].reset_index(drop=True)
    >>> df1
       0  1  2
    0  7  2  3
    1  4  5  6
    2  1  8  9
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2015-08-08
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      相关资源
      最近更新 更多