У меня есть объединенный фрейм данных, по крайней мере, из двух связанных фреймов данных:

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 . Это возможно?

Индексы информационных фреймов могут быть очень разных размеров.

Заранее спасибо.

0
machump 29 Май 2019 в 01:09

2 ответа

Лучший ответ
df3 = pd.concat([df1,df2], keys = (1,2))

df3.loc[(1), 'Type'] == 'C'

Когда вы согласны, вы можете назначить ключи df. Это создаст мультииндекс с ключами, разделяющими конкатонированные df. Затем, когда вы используете .loc с ключами, вы можете использовать ( вокруг клавиши для вызова группы. В приведенном выше коде мы изменили бы все типы df1 (который имеет ключ 1) на C.

0
Ben Pap 28 Май 2019 в 22:31

Используйте 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
0
Andy L. 28 Май 2019 в 22:36