У меня есть набор данных из двух столбцов, и я хочу создать третий столбец, который сообщает, являются ли значения первых двух столбцов идентичными, и называет идентичное значение для каждой строки.
Пример данных:
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. Изменили «True» логического массива на значение совпадения, т.е. красного, синего или зеленого, и 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 в каждом цикле, поэтому информация о соответствующих строках для предыдущих совпадений цветов (красного и синего) теряется и отображается только зеленым цветом.Я надеялся получить три столбца парных совпадений (то есть добавить / добавить столбцы при каждом запуске цикла), которые затем я мог бы объединить в один желаемый столбец.Большое спасибо.