Python 将数据帧中的每个数值设为负值
如何使每个Python 将数据帧中的每个数值设为负值,python,pandas,dataframe,Python,Pandas,Dataframe,如何使每个pandasDataFrame值为负值?我找不到列出的这个答案,我认为它可以为任何学习如何使用pandasDataFrame中的数据的人提供一个很好的参考 In [1]: frame Out[1]: position index 0 6 1 7 2 7 3 7 4 8 5 9 6 1 7 1 像这样使用: 只需执行-frame(
pandas
DataFrame值为负值?我找不到列出的这个答案,我认为它可以为任何学习如何使用pandas
DataFrame中的数据的人提供一个很好的参考
In [1]: frame
Out[1]:
position
index
0 6
1 7
2 7
3 7
4 8
5 9
6 1
7 1
像这样使用:
只需执行
-frame
(或*-1
):
正如其他人所指出的,如果您也有非数字列,这将不起作用。选择所有数值列的方法:
frame.select_dtypes(include=[np.number])
如果已经为负值的值应该保持为负值,那么确实要使用@Easypeasy所指出的abs()
。这就变成了:
- frame.select_dtypes(include=[np.number]).abs()
您可以应用任何运算符或跨列应用。要对其进行适当的变异,只需将列乘以-1:
>>> frame = pd.DataFrame({'position': [6,7,7,7,8,9,1,1]})
>>> frame['position'] *= -1
>>> frame
position
0 -6
1 -7
2 -7
3 -7
4 -8
5 -9
6 -1
7 -1
但在本例中,您甚至不需要指定列,因为它是您唯一拥有的列,所以只需:
>>> frame *= -1
如果您想创建副本而不是原地变异,这甚至很简单:
>>> frame * -1
…或者,相当地,甚至更简单地说:
>>> -frame
其他答案将满足您的要求。但是,如果您的数据帧中已经有一些负数,但希望全部为负数,则可以这样做:
frame.apply(lambda x:-x.abs(),axis=1)
您不需要应用,只需执行-frame.abs()
是否有方法在此基础上测试条件?例如,如果另一列的值等于“credit”,我想保持为正,但如果是“debit”,我想保持为负
>>> frame * -1
>>> -frame