具有以下字符串的熊猫数据帧:
key 0 1-9 10-18 19-27 28-36 37-45 46-54 55-63 64-72 73-81 82-90 91-99 100
1 A 1 2 1 4 1 1 1 7 1 3 1 1 1
2 B 3 1 1 1 6 1 1 1 7 1 8 1 1
3 C 1 1 2 1 1 1 1 1 1 1 1 1 1
我想获取特定行的单元格总和,因此例如对于第一行(键 A(,结果应该是 25(1 + 2
+ 1 + 4 + 1 + 1 + 1 + 7 + 1 + 3 + 1 + 1 + 1 + 1(。你会如何处理这样的问题?
如果key
中的值是唯一的,需要按标签选择:
按列key
按set_index
创建索引,然后按DataFrame.loc
选择:
#select return Series
print (df.set_index('key').loc['A'])
0 1
1-9 2
10-18 1
19-27 4
28-36 1
37-45 1
46-54 1
55-63 7
64-72 1
73-81 3
82-90 1
91-99 1
100 1
Name: A, dtype: int64
out = df.set_index('key').loc['A'].sum()
或者先创建index
,然后按Series.at
或Series.loc
sum
和最后选择:
#sum return Series
print (df.set_index('key').sum(axis=1))
key
A 25
B 33
C 14
dtype: int64
out = df.set_index('key').sum(axis=1).at['A']
out = df.set_index('key').sum(axis=1)['A']
out = df.set_index('key').sum(axis=1).loc['A']
或先按boolean indexing
过滤,然后再按sum
过滤:
#filtering create one row DataFrame
print (df[df['key'] == 'A'])
key 0 1-9 10-18 19-27 28-36 37-45 46-54 55-63 64-72 73-81 82-90
1 A 1 2 1 4 1 1 1 7 1 3 1
91-99 100
1 1 1
out = df[df['key'] == 'A'].sum(axis=1).item()
如果key
中的值应该重复并且需要按标签选择:
print (df)
key 0 1-9 10-18 19-27 28-36 37-45 46-54 55-63 64-72 73-81 82-90
1 A 1 2 1 4 1 1 1 7 1 3 1
2 A 3 1 1 1 6 1 1 1 7 1 8
3 C 1 1 2 1 1 1 1 1 1 1 1
91-99 100
1 1 1
2 1 1
3 1 1
首先可以通过values
将过滤后的值转换为numpy数组,然后sum
2d array
:
out = df.set_index('key').loc['A'].values.sum()
双sum
- 第一个sum
创建Series
,第二个sum
返回标量:
out = df.set_index('key').loc['A'].sum().sum()
out = df.set_index('key').sum(axis=1).at['A'].sum()
如果需要,请按位置选择:
使用DataFrame.iloc
或Series.iat
,Series.iloc
:
out = df.set_index('key').iloc[0].sum()
out = df.set_index('key').sum(axis=1).iat[0]
out = df.set_index('key').sum(axis=1).iloc[0]