Tuu*_*nas 28 python sum pandas
如果我有一个类似于这个的数据帧
Apples Bananas Grapes Kiwis
2 3 nan 1
1 3 7 nan
nan nan 2 3
Run Code Online (Sandbox Code Playgroud)
我想添加一个这样的列
Apples Bananas Grapes Kiwis Fruit Total
2 3 nan 1 6
1 3 7 nan 11
nan nan 2 3 5
Run Code Online (Sandbox Code Playgroud)
我想你可以使用df['Apples'] + df['Bananas']等等,但我的实际数据帧比这大得多.我希望一个公式df['Fruit Total']=df[-4:-1].sum可以在一行代码中完成这个技巧.然而,这没有奏效.有没有办法在没有明确总结所有列的情况下做到这一点?
kel*_*kka 51
这可能对初学者有帮助,因此为了完整起见,如果您知道列名称(例如它们在列表中),则可以使用:
column_names = ['Apples', 'Bananas', 'Grapes', 'Kiwis']
df['Fruit Total']= df[column_names].sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
这使您可以灵活地选择使用哪些列,因为您只需操作列表column_names,并且可以执行诸如仅选择名称中带有字母“a”的列之类的操作。这样做的另一个好处是,人们更容易通过列名称理解他们在做什么。将此与 结合起来list(df.columns)以列表格式获取列名称。因此,如果你想删除最后一列,你所要做的就是:
column_names = list(df.columns)
df['Fruit Total']= df[column_names[:-1]].sum(axis=1)
Run Code Online (Sandbox Code Playgroud)
jez*_*ael 28
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
Run Code Online (Sandbox Code Playgroud)
Ram*_*mon 12
可以在不知道列数甚至没有 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 2.0
Run Code Online (Sandbox Code Playgroud)
小智 7
df['Fruit Total']= df.iloc[:, -4:-1].sum(axis=1)在原始df上使用不会添加最后一列(“ 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
Run Code Online (Sandbox Code Playgroud)