我有一个数据框:
Name y1 y2 y3
1 Ben 01 02 03
2 Jane 04 05 06
3 Sarah 07 07 06
我试图在我的数据框中添加一行,它提供了每列中的总行数。我的代码是:
import pandas as pd
df = pd.DataFrame(np.insert(df.values, 0, values=[df.sum(axis=0)], axis=0))
df.set_value(0, 0,'total')
df.head()
这是成功的,但也会删除我的列名:
0 1 2 3
0 Total 12 14 15
1 Ben 01 02 03
2 Jane 04 05 06
3 Sarah 07 07 06
而不是按照需要返回:
Name y1 y2 y3
0 Total 12 14 15
1 Ben 01 02 03
2 Jane 04 05 06
3 Sarah 07 07 06
我试过插入
Index(['Name'], name=df.index.name)
到
df = pd.DataFrame(np.insert(df.values, 0, values=[df.sum(axis=0)], Index(['Name'], name=df.index.name) axis=0))
但这只会返回错误
TypeError:不可用类型:'索引'
我哪里错了?
答案 0 :(得分:2)
避免这种情况的一种方法是通过argumentList <- split(df, col(df)) # create a list of arguments
names(argumentList)[1] <- "x" # name at least one of the inputs for the default value x
argumentList["na.rm"] <- TRUE # add any other arguments needed
do.call( myFunction, argumentList )
添加新行,然后将其移至顶部:
.loc
如果这对您很重要,您可以使用df.loc[len(df)+1] = ['Total'] + df.iloc[:, 1:].sum(axis=0).tolist()
df = df.loc[[df.index[-1]] + df.index[:-1].tolist(), :]
# Name y1 y2 y3
# 4 Total 12 14 15
# 1 Ben 1 2 3
# 2 Jane 4 5 6
# 3 Sarah 7 7 6
。
答案 1 :(得分:2)
IIUC,你可以这样做,使用select_types
,assign
和pd.concat
:
pd.concat([df.select_dtypes(include=np.number)
.sum()
.to_frame()
.T
.assign(Name='Total'),df])
输出:
Name y1 y2 y3
0 Total 12 14 15
1 Ben 1 2 3
2 Jane 4 5 6
3 Sarah 7 7 6
答案 2 :(得分:1)
您可以使用{1=>[GameObject1], 2=>[GameObject3, GameObject4], 3=>[GameObject2] ...}
来堆叠两个数据帧:
pandas.concat
答案 3 :(得分:1)
你可以尝试
s=df.sum()
s.loc['Name']='Total'
df.loc[0]=s
df.sort_index()
Out[457]:
Name y1 y2 y3
0 Total 12 14 15
1 Ben 1 2 3
2 Jane 4 5 6
3 Sarah 7 7 6
答案 4 :(得分:1)
使用np.insert
的解决方案应该非常快,但必须首先使用非数字列创建index
:
#create index from `Name` column
df = df.set_index('Name')
#add first value to index
idx = np.insert(df.index, 0, 'Total')
#add columns and index parameters to DataFrame contructor and last reset index
df = pd.DataFrame(np.insert(df.values, 0, df.sum(), axis=0),
columns=df.columns,
index=idx).reset_index()
print (df)
Name y1 y2 y3
0 Total 12 14 15
1 Ben 1 2 3
2 Jane 4 5 6
3 Sarah 7 7 6