猿问

熊猫,将特定范围的单元格连续求和

具有以下字符串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)。


你会如何处理这样的问题?


尚方宝剑之说
浏览 120回答 1
1回答

慕妹3242003

如果中的值key是唯一的并且需要按标签选择:经柱CREATE INDEXkey通过set_index,然后通过选择DataFrame.loc:#select return Seriesprint (df.set_index('key').loc['A'])0        11-9      210-18    119-27    428-36    137-45    146-54    155-63    764-72    173-81    382-90    191-99    1100      1Name: A, dtype: int64out = df.set_index('key').loc['A'].sum()或者index先创建,然后再sum最后选择Series.ator Series.loc:#sum return Seriesprint (df.set_index('key').sum(axis=1))keyA    25B    33C    14dtype: int64out = 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 DataFrameprint (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  首先可以将过滤后的值转换为 numpy 数组values,然后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]
随时随地看视频慕课网APP

相关分类

Python
我要回答