Python 3.x 如何将列表强制转换为dataframe列的所有唯一值?
这里有一个数据框,比如a列和B列,我有一个Python 3.x 如何将列表强制转换为dataframe列的所有唯一值?,python-3.x,pandas,Python 3.x,Pandas,这里有一个数据框,比如a列和B列,我有一个列表=[[0.1,0.2],[0.3,0.4],[0.8,0.6],[0.1,0.65] DataFrame A 0 5 1 5 2 5 3 8 4 8 5 9 6 9 7 10 8 10 我想创建一个单独的B列,并为a列中的所有唯一值强制转换上述列表中的每个元素(列表),即,我想实现
列表=[[0.1,0.2],[0.3,0.4],[0.8,0.6],[0.1,0.65]
DataFrame
A
0 5
1 5
2 5
3 8
4 8
5 9
6 9
7 10
8 10
我想创建一个单独的B列,并为a列中的所有唯一值强制转换上述列表中的每个元素(列表),即,我想实现以下目标
DataFrame
A B
0 5 [0.1,0.2]
1 5 [0.1,0.2]
2 5 [0.1,0.2]
3 8 [0.3,0.4]
4 8 [0.3,0.4]
5 9 [0.8,0.6]
6 9 [0.8,0.6]
7 10 [0.1,0.65]
8 10 [0.1,0.65]
在pandas中是否有这样做的方法?使用numpy索引和convert column
a
by将值编码到枚举数组,仅当a
列的唯一值的数量与列表的长度相同或更小时,解决方案才起作用:
L = [[0.1,0.2] ,[0.3,0.4], [0.8,0.6], [0.1,0.65]]
df['B'] = np.array(L)[pd.factorize(df['A'])[0]].tolist()
print (df)
A B
0 5 [0.1, 0.2]
1 5 [0.1, 0.2]
2 5 [0.1, 0.2]
3 8 [0.3, 0.4]
4 8 [0.3, 0.4]
5 9 [0.8, 0.6]
6 9 [0.8, 0.6]
7 10 [0.1, 0.65]
8 10 [0.1, 0.65]
详细信息:
print (pd.factorize(df['A'])[0])
[0 0 0 1 1 2 2 3 3]
另一种处理任何数据的方法是,如果不匹配,则使用以下方法获取最后一行的缺失值:
或:
如果希望通过空列表或其他值来修复缺少的值,可以使用:
将numpy索引与convert column
A
by一起用于将值编码到枚举数组,仅当A
列的唯一值的数量与列表的长度相同或更少时,解决方案才起作用:
L = [[0.1,0.2] ,[0.3,0.4], [0.8,0.6], [0.1,0.65]]
df['B'] = np.array(L)[pd.factorize(df['A'])[0]].tolist()
print (df)
A B
0 5 [0.1, 0.2]
1 5 [0.1, 0.2]
2 5 [0.1, 0.2]
3 8 [0.3, 0.4]
4 8 [0.3, 0.4]
5 9 [0.8, 0.6]
6 9 [0.8, 0.6]
7 10 [0.1, 0.65]
8 10 [0.1, 0.65]
详细信息:
print (pd.factorize(df['A'])[0])
[0 0 0 1 1 2 2 3 3]
另一种处理任何数据的方法是,如果不匹配,则使用以下方法获取最后一行的缺失值:
或:
如果希望通过空列表或其他值来修复缺少的值,可以使用:
我们可以在映射到列表的列
a
中创建唯一值的字典。然后我们使用Series.map
创建新列:
df['B'] = df['A'].map({a: l for a, l in zip(df['A'].unique(), lst)})
A B
0 5 [0.1, 0.2]
1 5 [0.1, 0.2]
2 5 [0.1, 0.2]
3 8 [0.3, 0.4]
4 8 [0.3, 0.4]
5 9 [0.8, 0.6]
6 9 [0.8, 0.6]
7 10 [0.1, 0.65]
8 10 [0.1, 0.65]
我们可以在映射到列表的列
a
中创建唯一值的字典。然后我们使用Series.map
创建新列:
df['B'] = df['A'].map({a: l for a, l in zip(df['A'].unique(), lst)})
A B
0 5 [0.1, 0.2]
1 5 [0.1, 0.2]
2 5 [0.1, 0.2]
3 8 [0.3, 0.4]
4 8 [0.3, 0.4]
5 9 [0.8, 0.6]
6 9 [0.8, 0.6]
7 10 [0.1, 0.65]
8 10 [0.1, 0.65]