具有以下 Strings 的Pandas DataFrame:
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)。
您将如何处理这样的问题?
答案 0 :(得分:3)
如果key
中的值是唯一的,并且需要按标签进行选择:
按set_index
按列key
创建索引,然后按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
,然后创建sum
,最后由Series.at
或Series.loc
选择:
#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
然后sum
中的2d array
将过滤后的值转换为numpy数组:
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]