我有一个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()
的使用有强烈的意见。所以有人可能想读一读