/ / как можем да обединим два информационни рамки без да губим ред в Python - Python, Python - 2.7, Python - 3.x, Pandas

как можем да обединим два информационни рамки, без да губим никакъв ред в python - python, python - 2.7, python - 3.x, pandas

Имам два кадъра за данни, както е показано по-долу.

DF1:

Student_Name,total
X,400
Y,350
D,450
E,420

df2:

Student_Name,jan
X,350
Y,380
A,360
B,370
Y,380

изход:

Student_Name,jan,feb
X,350,400
Y,380,350
A,360,0
B,370,0
Y,380,350

продукцията не трябва да има. на ред от df2 и стойност, взета от df1. ако етикетът df2 ред не е намерен в df1, тогава трябва да има 0. също и ако df2 index колоната има дубликат. например тук Y е два пъти и в двата случая взехме стойност от df1. също продукция не трябва да има ред, който не е в df2, но в df1. тук D и E е в df1, но не и в df2, така че не включете в изходния dataframe.

Отговори:

0 за отговор № 1

можеш да използваш pd.merge () метод:

In [38]: pd.merge(df1, df2, on="Student_Name", how="left").fillna(0)
Out[38]:
Student_Name  total    jan
0            X    400  350.0
1            Y    350  380.0
2            Y    350  380.0
3            D    450    0.0
4            E    420    0.0

или:

In [39]: pd.merge(df1, df2, on="Student_Name", how="right").fillna(0)
Out[39]:
Student_Name  total  jan
0            X  400.0  350
1            Y  350.0  380
2            Y  350.0  380
3            A    0.0  360
4            B    0.0  370

Ако трябва да се присъедините само към една колона, то може да е по-бързо да се използва .map() метод:

In [47]: df2["new"] = df2.Student_Name.map(df1.set_index("Student_Name")["total"]) 
.fillna(0).astype(int)

In [48]: df2
Out[48]:
Student_Name  jan  new
0            X  350  400
1            Y  380  350
2            A  360    0
3            B  370    0
4            Y  380  350