Python 3.x 如何将列表强制转换为dataframe列的所有唯一值?

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列中的所有唯一值强制转换上述列表中的每个元素(列表),即,我想实现

这里有一个数据框,比如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列中的所有唯一值强制转换上述列表中的每个元素(列表),即,我想实现以下目标

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]