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

标签 python pandas numpy dataframe

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

我一直在使用这段代码在文件中创建汇总行

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

最佳答案

考虑示例数据框 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

结合使用ilocargsort

我会依赖于两件事

  1. 对 bool 数组进行排序会将 False 放在第一位,因此当一个简单的序列数组不等于目标行时,我将进行排序。
  2. 排序是稳定的,因此所有 True 值将保持相同的相对顺序。
  3. argsort 返回我需要用 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

headtail 用于交换最后一行

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

或者

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

      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

关于python - 无法将一行移动到数据框的顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49540279/

相关文章:

Python在网页弹出窗口中从电脑中选择图像

python - Tensorflow 分类标签数据类型

python - 将 Pandas DataFrame 分成满足条件的行之间的部分

python - 如何访问 gensim word2vec 中的输出嵌入(输出向量)?

python - 使用列和行索引函数填充数据帧缺失元素的最有效方法

python - 从元组中提取边集

python - urllib2中同一个程序如何使用不同的ip代理?

python - 无法按 Pandas 数据框中的时间戳编制索引

python - 在python中按数字部分按升序对包含数字和字母的字符串列进行排序

python - numpy数组索引中的隐式转置