我有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根本就没有调用函数,但我无法弄清楚为什么。 缩进看起来对我来说是正确的:
答案 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
我将依赖两件事
argsort
,所以当一个简单的序列数组不等于到目标行时,我正在排序。False
值都将保持相同的相对顺序。True
返回我需要使用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
和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