熊猫的快速提问。 假设我有一个存储以下值的pandas数据框
timestamp value
2000-01-03 00:00:00 25
2000-01-03 00:30:00 -10
2000-01-03 01:00:00 100
2000-01-03 01:30:00 -690
2000-01-03 02:00:00 650
2000-01-03 02:30:00 320
2000-01-03 03:00:00 150
2000-01-03 03:30:00 160
我想添加一个列,其中填充的地方a = 1,如果值> 0,则为其他-1
timestamp value a
2000-01-03 00:00:00 25 1
2000-01-03 00:30:00 -10 -1
2000-01-03 01:00:00 100 1
2000-01-03 01:30:00 -690 -1
2000-01-03 02:00:00 650 1
2000-01-03 02:30:00 320 1
2000-01-03 03:00:00 150 1
2000-01-03 03:30:00 160 1
是否有一个简单的熊猫语法来做到这一点? 我已经尝试了大量的代码,而不是在这里发布,因为它比任何东西都更令人困惑......
谢谢! (我正在改变问题以使其更清楚,对不起......)
答案 0 :(得分:1)
使用np.sign()方法:
In [22]: df['a'] = np.sign(df.value)
In [23]: df
Out[23]:
timestamp value a
0 2000-01-03 00:00:00 25 1
1 2000-01-03 00:30:00 -10 -1
2 2000-01-03 01:00:00 100 1
3 2000-01-03 01:30:00 -690 -1
4 2000-01-03 02:00:00 650 1
5 2000-01-03 02:30:00 320 1
6 2000-01-03 03:00:00 150 1
7 2000-01-03 03:30:00 160 1
8 2000-01-03 04:00:00 0 0 # <-----
注意:np.sign
- 为0
值返回0
,如果您希望-1
为零值,请使用np.where():
In [24]: df['a2'] = np.where(df.value > 0, 1, -1)
In [25]: df
Out[25]:
timestamp value a a2
0 2000-01-03 00:00:00 25 1 1
1 2000-01-03 00:30:00 -10 -1 -1
2 2000-01-03 01:00:00 100 1 1
3 2000-01-03 01:30:00 -690 -1 -1
4 2000-01-03 02:00:00 650 1 1
5 2000-01-03 02:30:00 320 1 1
6 2000-01-03 03:00:00 150 1 1
7 2000-01-03 03:30:00 160 1 1
8 2000-01-03 04:00:00 0 0 -1 # <----
答案 1 :(得分:0)
此代码应该有效:
list(trend.map(lambda x: 1 if x is True else -1))
如果您不想要列表,只需删除list()
即可。然后它返回一个系列。
如果您想要trade
上的工作:
trade.trend.map(lambda x: 1 if x is True else -1)
会做同样的工作。