我有一个两列的数据集,我想创建第三列,说明前两列的值是否相同,并为每一行命名相同的值。
示例数据:
import pandas as pd
data = {'Colour_mix': ['1','2', '3', '4', '5', '6', '7', '8', '9', '10'],
'Colour_1': ['red', 'blue', 'red', 'red', 'green', 'green', 'green', 'red', 'blue', 'blue'],
'Colour_2': ['red', 'green', 'red', 'blue', 'green', 'red', 'green', 'red', 'green', 'blue'] }
df1 = pd.DataFrame(data)
cols = ['Colour_mix', 'Colour_1', 'Colour_2']
df1 = df1[cols]
df1
我想要的结果是这样的:
data2 = {'Colour_mix': ['1','2', '3', '4', '5', '6', '7', '8', '9', '10'],
'Colour_1': ['red', 'blue', 'red', 'red', 'green', 'green', 'green', 'red', 'blue', 'blue'],
'Colour_2': ['red', 'green', 'red', 'blue', 'green', 'red', 'green', 'red', 'green', 'blue'],
'Pairwise_match': ['red', 'False', 'red', 'False', 'green', 'False', 'green', 'red', 'False', 'blue']}
df2 = pd.DataFrame(data2)
cols2 = ['Colour_mix', 'Colour_1', 'Colour_2', 'Pairwise_match']
df2 = df2[cols2]
df2
即添加一个新列,它首先说明 Colour_1 和 Colour_2 列何时匹配,其次说明共享值是什么(红色、蓝色或绿色)。
到目前为止,我的方法是在 Colour_1 和 Colour_2 列匹配时创建布尔数组的有序字典,然后我希望创建一个迭代循环: 1. 将布尔数组的“真”更改为匹配,即红色、蓝色或绿色,以及 2. 将结果匹配合并到一个列中。
到目前为止我的代码:
# Create a list of boolean arrays for each match pair
colour_matches = collections.OrderedDict()
colour_matches['red'] = ( (df1['Colour_1']=='red')
& (df1['Colour_2']=='red')
)
colour_matches['blue'] = ( (df1['Colour_1']=='blue')
& (df1['Colour_2']=='blue')
)
colour_matches['green'] = ( (df1['Colour_1']=='green')
& (df1['Colour_2']=='green')
)
# Add pairwise match columns
for p in colour_matches:
print(p)
_matches_df = pd.DataFrame(colour_matches[p])
_matches_df.columns = ['Pairwise_match']
df_new = pd.concat([df1, _matches_df], axis=1)
我遇到的两个问题: 1. 我不知道如何更改循环中布尔数组的值,因此“True”被有条件地替换为两个颜色列(红色、蓝色或绿色)的共享值. 2. 我的循环当前会覆盖每个循环中的 Pairwise_match,因此有关先前颜色匹配(红色和蓝色)的匹配行的信息丢失,仅显示绿色。我希望最终得到三列成对匹配(即在循环的每次运行中添加/追加列),然后我可以将其合并到我想要的单个列中。非常感谢。
一只斗牛犬
慕码人2483693
相关分类