Pandas:将多列汇总为一列,不包含最后一列

xriantvc  于 2023-03-06  发布在  其他
关注(0)|答案(6)|浏览(162)

如果我有一个类似的 Dataframe

Apples   Bananas   Grapes   Kiwis
2        3         nan      1
1        3         7        nan
nan      nan       2        3

我想添加一个这样的列

Apples   Bananas   Grapes   Kiwis   Fruit Total
2        3         nan      1        6
1        3         7        nan      11
nan      nan       2        3        5

我想你可以使用df['Apples'] + df['Bananas']等等,但是我的实际 Dataframe 比这个大得多。我希望像df['Fruit Total']=df[-4:-1].sum这样的公式可以在一行代码中完成这个任务。但是没有成功。有没有办法不显式地对所有列求和呢?

rqdpfwrv

rqdpfwrv1#

可以先按iloc选择,然后按sum选择:

df['Fruit Total']= df.iloc[:, -4:-1].sum(axis=1)
print (df)
   Apples  Bananas  Grapes  Kiwis  Fruit Total
0     2.0      3.0     NaN    1.0          5.0
1     1.0      3.0     7.0    NaN         11.0
2     NaN      NaN     2.0    3.0          2.0

对于所有列的总和,用途:

df['Fruit Total']= df.sum(axis=1)
mrzz3bfm

mrzz3bfm2#

这可能对初学者有帮助,所以为了完整性起见,如果你知道列名(例如,它们在列表中),你可以用途:

column_names = ['Apples', 'Bananas', 'Grapes', 'Kiwis']
df['Fruit Total']= df[column_names].sum(axis=1)

这给了你灵活性你使用哪些列,因为你只需要操作列表column_names,你可以做的事情,如只挑选列名称中的字母'a'。这样做的另一个好处是,它更容易让人们通过列名称理解他们在做什么。将此与list(df.columns)结合起来,以获得列表格式的列名称。因此,如果你想删除最后一列,你所要做的就是:

column_names = list(df.columns)
df['Fruit Total']= df[column_names[:-1]].sum(axis=1)
li9yvcax

li9yvcax3#

在不知道列数甚至不使用iloc的情况下也可以执行此操作:

print(df)
   Apples  Bananas  Grapes  Kiwis
0     2.0      3.0     NaN    1.0
1     1.0      3.0     7.0    NaN
2     NaN      NaN     2.0    3.0

cols_to_sum = df.columns[ : df.shape[1]-1]

df['Fruit Total'] = df[cols_to_sum].sum(axis=1)

print(df)
   Apples   Bananas Grapes  Kiwis   Fruit Total
0  2.0      3.0     NaN     1.0     5.0
1  1.0      3.0     7.0     NaN     11.0
2  NaN      NaN     2.0     3.0     5.0
5t7ly7z5

5t7ly7z54#

在原始df上使用df['Fruit Total']= df.iloc[:, -4:-1].sum(axis=1)不会添加最后一列('Kiwis '),您应该使用df.iloc[:, -4:]来选择所有列:

print(df)
   Apples  Bananas  Grapes  Kiwis
0     2.0      3.0     NaN    1.0
1     1.0      3.0     7.0    NaN
2     NaN      NaN     2.0    3.0

df['Fruit Total']=df.iloc[:,-4:].sum(axis=1)

print(df)
   Apples  Bananas  Grapes  Kiwis  Fruit Total
0     2.0      3.0     NaN    1.0          6.0
1     1.0      3.0     7.0    NaN         11.0
2     NaN      NaN     2.0    3.0          5.0
tjvv9vkg

tjvv9vkg5#

如果你想在不知道 Dataframe 的形状/大小的情况下得出总数,我想建立在Ramon的答案上。我将在下面使用他的答案,但修复一个不包括总数最后一列的项目。我已经从形状中删除了-1:

cols_to_sum = df.columns[ : df.shape[1]-1]

对此:
x一个一个一个一个x一个一个二个x
然后它会给出正确的总数,而不会跳过最后一列。

p8h8hvxi

p8h8hvxi6#

这可能是一个更容易解决的方法,并且它还将处理其他不需要的数据类型:

df['Fruit Total'] = df.sum(axis=1, numeric_only= True)

print(df)
   Apples   Bananas Grapes  Kiwis   Fruit Total
0  2.0      3.0     NaN     1.0     6.0
1  1.0      3.0     7.0     NaN     11.0
2  NaN      NaN     2.0     3.0     5.0

相关问题