无法将行移到数据帧的顶部

2024-10-03 00:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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


Tags: 文件csvto数据dfnanac数值
1条回答
网友
1楼 · 发布于 2024-10-03 00:20:17

考虑示例数据帧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. 在布尔数组上排序将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

相关问题 更多 >