Concat por linha com dataframes de amostra 2
Oct 20 2020
Eu tenho 2 dataframes,
df1
col1 col2 col3
0 ABC XYZ123 RA100
1 DEF YHG753 RA200
2 ABC XYZ123 RA100
3 DEF YHG753 RA200
4 ABC XYZ123 RA100
5 DEF YHG753 RA200
df2
col5 col6
0 TU1 DUM1
1 TU2 DUM2
2 TU3 DUM3
Estou tentando conciliar cada linha de df1com uma linha selecionada aleatoriamente dedf2 .
Tenho tentado pd.concat(frames, axis=1), mas concatnão funcionará comigo porque shapeos dataframes não estão combinando. Portanto, estou me perguntando se há uma maneira melhor de fazer isso em vez de aumentar as linhas de df2para corresponder às de df1, então faça concat.
Referência: concate aleatoriamente frames de dados por linha
Saída de amostra esperada:
col1 col2 col3 col5 col6
0 ABC XYZ123 RA100 TU3 DUM3
1 DEF YHG753 RA200 TU1 DUM1
2 ABC XYZ123 RA100 TU2 DUM2
3 DEF YHG753 RA200 TU2 DUM2
4 ABC XYZ123 RA100 TU3 DUM3
5 DEF YHG753 RA200 TU1 DUM1
Respostas
3 jezrael Oct 20 2020 at 18:53
A primeira ideia é criar uma coluna auxiliar com valor de índice de atribuição aleatório df2.indexe, em seguida, usar DataFrame.join:
#for test
np.random.seed(2002)
df = (df1.assign(id=np.random.choice(df2.index, size=len(df1)))
.join(df2, on='id')
.drop('id', axis=1))
print (df)
col1 col2 col3 col5 col6
0 ABC XYZ123 RA100 TU2 DUM2
1 DEF YHG753 RA200 TU3 DUM3
2 ABC XYZ123 RA100 TU1 DUM1
3 DEF YHG753 RA200 TU2 DUM2
4 ABC XYZ123 RA100 TU1 DUM1
5 DEF YHG753 RA200 TU1 DUM1
Outra ideia é mesclar por matriz numpy em DataFrame.merge:
np.random.seed(2002)
idx = np.random.choice(df2.index, size=len(df1))
df = df1.merge(df2, left_on=idx, right_index=True).drop('key_0', axis=1)
print (df)
col1 col2 col3 col5 col6
0 ABC XYZ123 RA100 TU2 DUM2
3 DEF YHG753 RA200 TU2 DUM2
1 DEF YHG753 RA200 TU3 DUM3
2 ABC XYZ123 RA100 TU1 DUM1
4 ABC XYZ123 RA100 TU1 DUM1
5 DEF YHG753 RA200 TU1 DUM1
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino