У меня есть конкатенированный фрейм данных как минимум из двух конкатенированных фреймов данных:
i.e.
df1
Name | Type | ID
0 Joe A 1
1 Fred B 2
2 Mike Both 3
3 Frank Both 4
df2
Name | Type | ID
0 Bill Both 1
1 Jill Both 2
2 Mill B 3
3 Hill A 4
ConcatDf:
Name | Type | ID
0 Joe A 1
1 Fred B 2
2 Mike Both 3
3 Frank Both 4
0 Bill Both 1
1 Jill Both 2
2 Mill B 3
3 Hill A 4
Предположим, что после они объединены, я хотел бы установить Type
для всех записей от df1
до C
и всех записей от df2
до B
. Это возможно?
Индексы фреймов данных могут быть самых разных размеров.
Заранее спасибо.
весь код включает в себя массу словарей циклов кадров данных и множество процессов в середине, включая дублирование, сопоставление и еще много чего. С полным контекстом, я чувствую, что было бы проще просто увидеть, когда индекс или идентификатор сбрасываются, и просто присвоить значения на основе конечного фрейма данных.
df3 = pd.concat([df1,df2], keys = (1,2))
df3.loc[(1), 'Type'] == 'C'
Когда вы concat, вы можете назначить клавиши df. Это создаст мультииндекс с ключами, разделяющими объединенные df. Затем, когда вы используете .loc
с ключами, вы можете использовать (
вокруг ключа, чтобы вызвать группу. В приведенном выше коде мы изменили бы все типы df1 (с ключом 1) на C.
Используйте merge
с indicator=True
, чтобы найти строки, принадлежащие df1
или df2
. Затем используйте np.where
, чтобы назначить A
или B
.
t = concatdf.merge(df1, how='left', on=concatdf.columns.tolist(), indicator=True)
concatdf['Type'] = np.where(t._merge.eq('left_only'), 'B', 'C')
Out[2185]:
Name Type ID
0 Joe C 1
1 Fred C 2
2 Mike C 3
3 Frank C 4
0 Bill B 1
1 Jill B 2
2 Mill B 3
3 Hill B 4
Почему бы просто не сделать это до, которое вы объединяете? Это похоже на проблему XY