从字典在数据框中创建分类变量
Create a categorical variable in dataframe from dictionary
将包含类别编号的字典转换为 Dataframe 中的列的最佳方法是什么?
字典中类别的数量是可变的,但是字典中每个值的总和等于数据框的长度。
唯一重要的方面是保持类别的正确顺序。先是 A,然后是 B,依此类推...
这是我的情况:
import pandas as pd
import numpy as np
# I have dictionaries with categorical data
dic = {"A":2 , "B": 3 , "C" : 1, "D" : 3 }
# And a separate dataframe with data
df = pd.DataFrame(np.random.rand(9,2), columns=['x','y'])
# For my data this test should always be true
sum(list(dic.values())) == len(df)
我想创建一个新列 df['Cat']
,它从字典中捕获类别并保持相同的顺序。例如。最终输出将如下所示:
IN: df
OUT:
x y Cat
0 0.741620 0.319183 A
1 0.908586 0.547509 A
2 0.767401 0.106174 B
3 0.315343 0.236445 B
4 0.774537 0.415653 B
5 0.306377 0.721040 C
6 0.114037 0.751824 D
7 0.580801 0.869796 D
8 0.413643 0.980575 D
这是一种方法。为清楚起见,将列表理解部分分为两部分:
dic = {"A":2 , "B": 3 , "C" : 1, "D" : 3 }
l1 = [[k] * v for k, v in dic.items()]
l2 = [i for l in l1 for i in l]
df["Cat"] = pd.Series(l2, dtype="category")
输出为:
x y Cat
0 0.741620 0.319183 A
1 0.908586 0.547509 A
2 0.767401 0.106174 B
3 0.315343 0.236445 B
4 0.774537 0.415653 B
5 0.306377 0.721040 C
6 0.114037 0.751824 D
7 0.580801 0.869796 D
8 0.413643 0.980575 D
将包含类别编号的字典转换为 Dataframe 中的列的最佳方法是什么?
字典中类别的数量是可变的,但是字典中每个值的总和等于数据框的长度。
唯一重要的方面是保持类别的正确顺序。先是 A,然后是 B,依此类推...
这是我的情况:
import pandas as pd
import numpy as np
# I have dictionaries with categorical data
dic = {"A":2 , "B": 3 , "C" : 1, "D" : 3 }
# And a separate dataframe with data
df = pd.DataFrame(np.random.rand(9,2), columns=['x','y'])
# For my data this test should always be true
sum(list(dic.values())) == len(df)
我想创建一个新列 df['Cat']
,它从字典中捕获类别并保持相同的顺序。例如。最终输出将如下所示:
IN: df
OUT:
x y Cat
0 0.741620 0.319183 A
1 0.908586 0.547509 A
2 0.767401 0.106174 B
3 0.315343 0.236445 B
4 0.774537 0.415653 B
5 0.306377 0.721040 C
6 0.114037 0.751824 D
7 0.580801 0.869796 D
8 0.413643 0.980575 D
这是一种方法。为清楚起见,将列表理解部分分为两部分:
dic = {"A":2 , "B": 3 , "C" : 1, "D" : 3 }
l1 = [[k] * v for k, v in dic.items()]
l2 = [i for l in l1 for i in l]
df["Cat"] = pd.Series(l2, dtype="category")
输出为:
x y Cat
0 0.741620 0.319183 A
1 0.908586 0.547509 A
2 0.767401 0.106174 B
3 0.315343 0.236445 B
4 0.774537 0.415653 B
5 0.306377 0.721040 C
6 0.114037 0.751824 D
7 0.580801 0.869796 D
8 0.413643 0.980575 D