Python 从列表中创建了额外的列

Python 从列表中创建了额外的列,python,pandas,Python,Pandas,我创建了一个列表,其中包含来自两个不同列a和B的唯一字符串。 例如: A B aaa asd sad aaa vas aaa wow kid asd vas list_a=df.A.unique().tolist() list_b=df.B.unique().tolist() list_ab=list(set(list_a+list_b)) 因此,列表包含aaa、sad、vas、wow、asd、kid 我正在为列表_ab中

我创建了一个列表,其中包含来自两个不同列a和B的唯一字符串。 例如:

A          B
aaa      asd
sad      aaa
vas      aaa
wow      kid
asd      vas

list_a=df.A.unique().tolist()
list_b=df.B.unique().tolist()

list_ab=list(set(list_a+list_b))
因此,列表包含aaa、sad、vas、wow、asd、kid

我正在为列表_ab中的每个元素手动分配值,因此我正在使用这些值创建一个新列表:

list_values=[7.5, 2.0, 1.5, 3.6, 7.4, 8.2]
我需要在数据集中创建一个新列,在其中分配a和B中元素值的平均值;所以

我不知道如何创建两列A_val和B_val,以便为A和B元素创建相应的值。我应该合并,加入吗


我希望您能帮我解决这个问题。

有关其他列,请尝试替换

然后


对于其他列,请尝试替换

然后


可以使用“合并”来执行此操作:

df的结果应该类似于:

     A    B  A_value  B_value  Value
0  aaa  asd      7.5      7.4   7.45
1  sad  aaa      2.0      7.5   4.75
2  vas  aaa      1.5      7.5   4.50
3  wow  kid      3.6      8.2   5.90
4  asd  vas      7.4      1.5   4.45

当然,如果您想添加更多的列,则需要在代码中进行一些调整。

可以使用merge:

df的结果应该类似于:

     A    B  A_value  B_value  Value
0  aaa  asd      7.5      7.4   7.45
1  sad  aaa      2.0      7.5   4.75
2  vas  aaa      1.5      7.5   4.50
3  wow  kid      3.6      8.2   5.90
4  asd  vas      7.4      1.5   4.45
当然,如果您想添加更多的列,则需要在代码中进行一些调整

out['Value'] = out.filter(like='value').mean(1)
out
Out[153]: 
     A    B  A_value  B_value  Value
0  aaa  asd      7.5      7.4   7.45
1  sad  aaa      2.0      7.5   4.75
2  vas  aaa      1.5      7.5   4.50
3  wow  kid      3.6      8.2   5.90
4  asd  vas      7.4      1.5   4.45
res = {list_ab[i]: list_values[i] for i in range(len(list_ab))}#Create dictionary


#Map dictionary values to create new columns 
df=df.assign(A_val=df['A'].map(res),B_val=df['B'].map(res),Value=df.filter(like='_val').mean(1))



    A    B    A_val  B_val  Value
0  aaa  asd    1.5    7.4   4.45
1  sad  aaa    8.2    1.5   4.85
2  vas  aaa    3.6    1.5   2.55
3  wow  kid    2.0    7.5   4.75
4  asd  vas    7.4    3.6   5.50
df_A_val = pd.DataFrame(A_val, index = A, columns = ['A_value'])
df_B_val = pd.DataFrame(B_val, index = B, columns = ['B_value'])


df = df.merge(df_A_val, right_index = True, left_on = 'A')
df = df.merge(df_B_val, right_index = True, left_on = 'B')

df['Value'] = df.iloc[:, 2:].T.mean()

df.drop_duplicates()
     A    B  A_value  B_value  Value
0  aaa  asd      7.5      7.4   7.45
1  sad  aaa      2.0      7.5   4.75
2  vas  aaa      1.5      7.5   4.50
3  wow  kid      3.6      8.2   5.90
4  asd  vas      7.4      1.5   4.45