У меня есть структура данных, похожая на эту по структуре, хотя у меня более 10M строк с 40 столбцами
df = pd.DataFrame([['a1', 'b1','c1','d1'],
['a2', 'b2','c2','d2'],
['a3', 'b3','c3','d3'],
['a4', 'b4','c4','d4'],
['a5', 'b5','c5','d5'],
['a6', 'b6','c6','d6'],
['a7', 'b7','c7','d7']], columns=['pid','tid','aid','cid'])
Я хочу создать матрицу с 0 и 1 на основе условия, где значение будет 1, если столбецname равно значению в определенной строке, а в противном случае 0.
Я манипулировал данным кадром следующим образом:
colnames = df['aid'].append(df['cid'])
df2 = pd.concat([df,pd.DataFrame(columns=colnames)])
df2 = df2.set_index('pid')
df2 = df2.fillna(0)
cols = df2.columns.tolist()
cols = cols[-1:] + cols[:-1]
df2= df2[cols]
, что дает мне:
tid aid c1 c2 c3 c4 c5 c6 c7 cid d1 d2 d3 d4 d5 d6 d7
pid
a1 b1 c1 0 0 0 0 0 0 0 d1 0 0 0 0 0 0 0
a2 b2 c2 0 0 0 0 0 0 0 d2 0 0 0 0 0 0 0
a3 b3 c3 0 0 0 0 0 0 0 d3 0 0 0 0 0 0 0
a4 b4 c4 0 0 0 0 0 0 0 d4 0 0 0 0 0 0 0
a5 b5 c5 0 0 0 0 0 0 0 d5 0 0 0 0 0 0 0
a6 b6 c6 0 0 0 0 0 0 0 d6 0 0 0 0 0 0 0
a7 b7 c7 0 0 0 0 0 0 0 d7 0 0 0 0 0 0 0
СейчасЯ хочу изменить значение с 0 на 1, если значение в 'aid' или 'cid' равно имени столбца
Я пробовал несколько вещей, таких как следующие, и не могу заставить что-либо работать:
df2.loc['aid' == colnames] = 1
df2.loc['cid' == colnames] = 1
мой желаемый вывод:
tid aid c1 c2 c3 c4 c5 c6 c7 cid d1 d2 d3 d4 d5 d6 d7
pid
a1 b1 c1 1 0 0 0 0 0 0 d1 1 0 0 0 0 0 0
a2 b2 c2 0 1 0 0 0 0 0 d2 0 1 0 0 0 0 0
a3 b3 c3 0 0 1 0 0 0 0 d3 0 0 1 0 0 0 0
a4 b4 c4 0 0 0 1 0 0 0 d4 0 0 0 1 0 0 0
a5 b5 c5 0 0 0 0 1 0 0 d5 0 0 0 0 1 0 0
a6 b6 c6 0 0 0 0 0 1 0 d6 0 0 0 0 0 1 0
a7 b7 c7 0 0 0 0 0 0 1 d7 0 0 0 0 0 0 1
как бы я это сделал?