我有一只熊猫df。 说我有一个专栏"活动"这可能是有趣的"或者"工作"我想将它转换为整数。 我所做的是:
df["activity_id"] = 1*(df["activity"]=="fun") + 2*(df["activity"]=="work")
这很有效,因为我不知道如何把if / else放在那里(如果你有10个活动就会变得复杂)。
然而,说我现在有相反的问题,我想从id转换为字符串,我不能再使用这个技巧了,因为我不能将字符串与布尔值相乘。我该怎么做?有没有办法使用if / else?
答案 0 :(得分:5)
您可以创建一个字典,其中id为键,字符串为值,然后使用map
系列方法将整数转换为字符串。
my_map = {1:'fun', 2:'work'}
df['activity']= df.activity_id.map(my_map)
答案 1 :(得分:2)
您可以将activity
列转换为categorical dtype:
df['activity'] = pd.Categorical(df['activity'])
然后,您将通过df['activity'].cat.codes
自动访问值的整数标签。
import pandas as pd
df = pd.DataFrame({'activity':['fun','work','fun']})
df['activity'] = pd.Categorical(df['activity'])
print(df['activity'].cat.codes)
0 0
1 1
2 0
dtype: int8
同时,saving memory:
仍然可以像以前一样访问字符串值print(df)
仍然产生
activity
0 fun
1 work
2 fun
答案 2 :(得分:1)
您还可以使用字典和列表推导来重新计算整个列的值。这样也可以轻松定义反向映射:
class A
attr_accesor :foo
ActiveAdmin.register A
controller do
def index
dataRecords = MyData.where("1=1")
dataRecords.each do |data|
data.foo = func()
end
@sortedData = dataRecords.sort_by{|data| data.foo}
end
end