我似乎无法一步到位地弄清楚如何做到这一点。我想将偶数条目设置为1,将奇数条目设置为-1:
df = DataFrame(np.arange(16).reshape(4,4))
x1 = df.where(df%2==0, -1)
x2 = x1.where(df%2!=0, 1)
pandas.DataFrame.where
的文档说:
返回与self相同形状的对象及其对应的条目 来自于自我,其中cond是真的,否则来自其他。
这是唯一的方法吗?
答案 0 :(得分:1)
我们可以使用np.where
来使用布尔条件将值设置为true,并在false时将值设置为备用值。这将返回一个numpy数组,如果你想作为df,你必须作为arg传递给df ctor:
In [31]:
df = pd.DataFrame(np.where(df%2==0,-1,1))
df
Out[31]:
0 1 2 3
0 -1 1 -1 1
1 -1 1 -1 1
2 -1 1 -1 1
3 -1 1 -1 1
答案 1 :(得分:1)
对于整个数据框,在一行中:
In [34]: df = pd.DataFrame(randint(0,8,size=(3,3)))
In [35]: df
Out[35]:
0 1 2
0 3 4 1
1 3 3 1
2 7 7 3
In [37]: df = ((df%2)-0.5)*-2
In [38]: df
Out[38]:
0 1 2
0 -1 1 -1
1 -1 -1 -1
2 -1 -1 -1
按栏:
df = pd.DataFrame([list('addfg'),list('LKJHU')]).T
df.Odds = ((df.index.values%2)-0.5)*-2
结果:
0 1 Odds 0 a L 1 1 d K -1 2 d J 1 3 f H -1 4 g U 1
答案 2 :(得分:1)
numpy.choose在这里很有用。
from pandas import DataFrame
import numpy as np
df = DataFrame(np.arange(16).reshape(4,4))
np.choose(df%2, [1, -1])
=>
0 1 2 3
0 1 -1 1 -1
1 1 -1 1 -1
2 1 -1 1 -1
3 1 -1 1 -1
第二个arg是要替换的值列表。 index = 0处的值替换值== 0等的位置