Python 从列表中创建了额外的列
我创建了一个列表,其中包含来自两个不同列a和B的唯一字符串。 例如: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
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