如何从熊猫数据帧中的每个数字中减去一



我有一个pandas数据帧,看起来像这样。

User    item    Q8_1    Q8_3    Q8_4    Q9_1    Q9_2    Q9_3    Q9_5    Q10_1   ... Q14_1
0   1a  1-237a  4   5   5   5   5   5   4   5   ... 5   5   5   5   4   3   3   5   5   4
1   2a  1-237a  5   5   3   4   5   5   4   4   ... 4   4   4   5   5   4   5   5   5   4
2   3a  1-237a  4   3   2   2   4   5   2   2   ... 2   5   3   4   3   3   4   3   3   3
3   4a  1-237a  4   4   4   5   5   5   4   5   ... 4   5   5   5   4   4   4   4   5   5
4   5a  1-237a  4   3   5   6   5   5   4   3   ... 4   5   5   6   5   4   6   5   4   3

我想从Q8_1列中的每一个整数值到最后一列递减1。

您可以使用切片:

df.loc[:, 'Q8_1':] -= 1

选项1

可以使用pandas.DataFrame.loc和如下所示的自定义lambda函数

df.loc[:, 'Q8_1':] = df.loc[:, 'Q8_1':].apply(lambda x: x - 1)
[Out]:
User    item  Q8_1  Q8_3  Q8_4  ...  Q15_4  Q15_5  Q24_3  Q24_6  Q24_8
0   1a  1-237a     3     4     4  ...      2      2      4      4      3
1   2a  1-237a     4     4     2  ...      3      4      4      4      3
2   3a  1-237a     3     2     1  ...      2      3      2      2      2
3   4a  1-237a     3     3     3  ...      3      3      3      4      4
4   5a  1-237a     3     2     4  ...      3      5      4      3      2

选项2

对于那些不想按照下面的第一条注释使用.apply()的人,一种选择是进行以下

df.loc[:, 'Q8_1':] = df.loc[:, 'Q8_1':] - 1
[Out]:
User    item  Q8_1  Q8_3  Q8_4  ...  Q15_4  Q15_5  Q24_3  Q24_6  Q24_8
0   1a  1-237a     3     4     4  ...      2      2      4      4      3
1   2a  1-237a     4     4     2  ...      3      4      4      4      3
2   3a  1-237a     3     2     1  ...      2      3      2      2      2
3   4a  1-237a     3     3     3  ...      3      3      3      4      4
4   5a  1-237a     3     2     4  ...      3      5      4      3      2

选项3

也可以使用pandas.DataFrame.loc.sub(1),如下

df.loc[:, 'Q8_1':] = df.loc[:, 'Q8_1':].sub(1)
[Out]:
User    item  Q8_1  Q8_3  Q8_4  ...  Q15_4  Q15_5  Q24_3  Q24_6  Q24_8
0   1a  1-237a     3     4     4  ...      2      2      4      4      3
1   2a  1-237a     4     4     2  ...      3      4      4      4      3
2   3a  1-237a     3     2     1  ...      2      3      2      2      2
3   4a  1-237a     3     3     3  ...      3      3      3      4      4
4   5a  1-237a     3     2     4  ...      3      5      4      3      2

备注:

  • 对于.apply()的使用有强烈的意见。所以有人可能想读一读

最新更新