无法将行移动到数据框的顶部

时间:2018-03-28 16:59:38

标签: python pandas numpy dataframe

我有280个CSV文件,每个我需要创建一个包含所有数值的总和的行。这很简单但我的问题是sumation需要在第一行。

我一直在使用此代码在文件

中创建求和行
df = pd.read_csv(file_path,sep=";",header=2, engine="python")

df.[Soma] = df.sum(numeric_only="boolean")

现在我需要将总和移到第一行。我显然不是第一个遇到这个问题的人,但是在尝试使它工作时我遇到了麻烦!我的csv文件非常大,所以我不能简单地手动重新排序数据框中的行。

这里有一个建议的解决方案看起来不错: Python Pandas: How to move one row to the first row of a Dataframe?

为了能够在此处发布数据帧,我排除了CSV文件中的大多数行和列。这就是它现在的样子(仍未设法使它工作):

       DATA_BASE   UF      COD            MUN        CNPJ

0      199407.0   AC   1030.0    MANCIO LIMA   4064077.0   
1      199407.0   AC   5184.0  MANOEL URBANO   4064077.0   
2      199407.0   AC   9465.0   ASSIS BRASIL   4064077.0   
3      199407.0   AC  15978.0          FEIJO   4064077.0   
4      199407.0   AC  15978.0          FEIJO   4902979.0   
5      199407.0   AC  18690.0         XAPURI         0.0   
soma  1196442.0  NaN  66325.0            NaN  21159287.0

更新

好的,谢谢@piRSquared我觉得我有一个很好的书面方法功能:

def putfirst(df, i):
    return df.iloc[(np.arange(len(df)) != i).argsort()]

putfirst(df,df.index.get_loc('soma'))

但无论出于何种原因,数据框架都没有发生任何事情。我没有得到任何错误,所以我认为Python根本就没有调用函数,但我无法弄清楚为什么。 缩进看起来对我来说是正确的:

How it looks to me

1 个答案:

答案 0 :(得分:1)

考虑样本数据框/text()

df

使用df = pd.DataFrame(np. arange(16).reshape(4, 4), columns=list('ABCD')) df A B C D 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15 iloc

的组合

我将依赖两件事

  1. 对布尔数组进行排序首先放置argsort,所以当一个简单的序列数组不等于到目标行时,我正在排序。
  2. 排序稳定,因此所有False值都将保持相同的相对顺序。
  3. True返回我需要使用argsort切片的数组。
  4. iloc
    def putfirst(df, i):
        return df.iloc[(np.arange(len(df)) != i).argsort()]
    
    putfirst(df, 3)
    
        A   B   C   D
    3  12  13  14  15
    0   0   1   2   3
    1   4   5   6   7
    2   8   9  10  11
    

    putfirst(df, 2) A B C D 2 8 9 10 11 0 0 1 2 3 1 4 5 6 7 3 12 13 14 15 head用于交换最后一行

    tail

    使用您的样本

    df.tail(1).append(df.head(-1))
    
        A   B   C   D
    3  12  13  14  15
    0   0   1   2   3
    1   4   5   6   7
    2   8   9  10  11
    

    或者

    putfirst(df, 6)
    
          DATA_BASE   UF      COD            MUN        CNPJ
    soma  1196442.0  NaN  66325.0            NaN  21159287.0
    0      199407.0   AC   1030.0    MANCIO LIMA   4064077.0
    1      199407.0   AC   5184.0  MANOEL URBANO   4064077.0
    2      199407.0   AC   9465.0   ASSIS BRASIL   4064077.0
    3      199407.0   AC  15978.0          FEIJO   4064077.0
    4      199407.0   AC  15978.0          FEIJO   4902979.0
    5      199407.0   AC  18690.0         XAPURI         0.0
    

    或者

    putfirst(df, len(df) - 1)
    
          DATA_BASE   UF      COD            MUN        CNPJ
    soma  1196442.0  NaN  66325.0            NaN  21159287.0
    0      199407.0   AC   1030.0    MANCIO LIMA   4064077.0
    1      199407.0   AC   5184.0  MANOEL URBANO   4064077.0
    2      199407.0   AC   9465.0   ASSIS BRASIL   4064077.0
    3      199407.0   AC  15978.0          FEIJO   4064077.0
    4      199407.0   AC  15978.0          FEIJO   4902979.0
    5      199407.0   AC  18690.0         XAPURI         0.0