将pandas python数据框列值转换为适当的位置

时间:2016-10-07 23:36:35

标签: python pandas dataframe

我有一列正数和负数,我想将其转换为0和1的列表。如果数字为正数,则应替换为1.如果数字为负数或0,则应替换为0.我该怎么做?

例如,在R中,我会这样做:

list = ifelse(list > 0, 1, 0)

3 个答案:

答案 0 :(得分:1)

您可以返回boolean个值,并使用astype(int)将其转换为10

print((df['A'] > 0).astype(int))

示例:

df = pd.DataFrame({'A': [1,-1,2,-2,3,-3]})
print(df)
A
0  1
1 -1
2  2
3 -2
4  3
5 -3
print((df['A'] > 0).astype(int))
0    1
1    0
2    1
3    0
4    1
5    0

答案 1 :(得分:0)

您可以使用索引器和.loc来更改

等值
 indexer = df[df['col']>0].index
 df.loc[indexer] = 1

  indexer_2 = df[df['col']<0].index
  df.loc[indexer_2] = 0

或者你可以看看numpy.where这样的

import numpy as np
import pandas as pd
pd.DataFrame(np.where(df>0,1,0),index=df.index)

答案 2 :(得分:0)

您可以使用DataFrame.apply将函数应用于DataFrame的每一行。例如:

import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [1, -2, 3, -4]})
df['A'] = df.apply(lambda row:np.where(row['A'] > 0, 1, 0), axis=1)

lambda函数可以替换为任何函数(不必是lambda),而axis=1是将函数应用于每一行而不是每一行列。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html