大家好我拥有超过50000条记录的Dataframe。它有一个名称列#34;国家"它有重复的值。
作为机器学习项目的一部分,我正在对此列执行标签编码,该列将使用具有整数值的50000条记录替换此列。 (对于那些不了解标签编码的人来说还是好的 - 它采用列的唯一值并为其分配一个整数值,主要基于字母顺序但不确定)。假设此数据帧是DF1,列是"国家"。
现在我的要求是我必须手动对另一个数据帧(DF2)做同样的操作,即不使用标签编码功能。
我到目前为止所尝试的内容以及我在哪里受到攻击的内容如下所述
尝试对DF2和temp_df进行正确连接,保持开启="国家"。但得到" NaN"在几个记录中。不确定原因
尝试使用.isin方法进行查找和替换但仍未获取 期望的产出。
所以我的基本问题是如何通过匹配两个数据框中两列的值来使用另一个数据框中的列值填充数据框中的列?
已更新
下面给出了示例代码输出以便更好地理解
DF2中的国家/地区列具有可重复的值,如下所示:
0 us
1 us
2 gb
3 us
4 au
5 fr
6 us
7 us
8 us
9 us
10 us
11 us
12 ca
13 at
14 us
15 us
16 es
17 fi
18 fr
19 us
20 us
temp_df数据框将为每个唯一的国家/地区名称设置整数值,如下所述(注意:此数据框只有唯一值。不重复):
1 gb 49
2 ca 22
3 au 5
4 de 34
5 fr 48
6 br 17
7 jp 75
8 sv 136
9 no 111
10 se 132
11 es 43
12 nl 110
13 mx 103
14 dk 36
15 ro 127
16 ch 24
17 it 71
18 be 10
19 ru 129
20 kr 78
21 fi 44
22 hk 59
23 ie 65
24 sg 133
25 nz 112
26 ar 3
27 at 4
28 in 68
29 cl 26
30 il 66
现在我必须在DF2中创建一个新列,方法是从DF_中的每个国家/地区值中获取temp_df的整数值。希望这会有所帮助。
答案 0 :(得分:0)
您可以使用pandas.Series.map
来完成此任务:
from io import StringIO
import pandas as pd
# Your data ..
data = """
id,country
0,AT
1,DE
2,UK
3,FR
4,AT
5,UK
6,IT
7,DE
"""
df = pd.read_table(StringIO(data), sep=',', index_col=[0])
# Create a map from your current labels to numeric labels:
country_labels = dict([(c, i) for i, c in enumerate(df.country.unique())])
# Use map() to transform your column and re-assign it
df.country = df.country.map(lambda c: country_labels[c])
print(df)
将上述数据转换为
country
id
0 0
1 1
2 2
3 3
4 0
5 2
6 4
7 1
根据您的问题的其中一条评论中的建议,您也可以使用replace()
df = df.replace({'country': country_labels })
答案 1 :(得分:0)
试试这个:
import pandas as pd
# dataframe
df = pd.DataFrame({'Country' : ['z','x', 'x', 'a', 'a', 'b', 'c'], 'Something' : [10, 1, 2, 1, 2, 3, 4]})
# create dictionary for mapping `sorted` countries to integer
country_map = dict(zip(sorted(df.Country.unique()), range(len(df.Country.unique()))))
# country_map should look smthing like:
# {'a': 0, 'b': 1, 'c': 2, 'x': 3, 'z': 4}, where a, b, .. are countries
# replace `Country` coloumn with mapping
df.replace({'Country': country_map })