如何将 pandas 数据框合并到具有更多列的数据框,同时用相应的值填充空列?
How to merge pandas dataframe to a dataframe with more columns, while filling in the empty columns with corresponding values?
我有两个数据框,df1(例如)有 5 行和 3 列,df2 有 5 行但只有 2 列,因此:
df1 = pd.DataFrame({"First_Name":['Mark','John','Adam','Mark','Adam'], "Purchased":[20,12,13,40,23], "Last_Name":['S.','M.','C.','S.','C.'])
First_Name Purchased Last_Name
0 Mark 20 S.
1 John 12 M.
2 Adam 13 C.
3 Mark 40 S.
4 Adam 23 C.
df2 = pd.DataFrame({"First_Name":['Jane','Mark','Mark','Adam','Jane'], "Purchased":[3,16,17,10,23]})
First_Name Purchased
0 Jane 3
1 Mark 16
2 Mark 17
3 Adam 10
4 Jane 23
我想将 df2 中的行附加到 df1,同时还根据 df1 中的值为第三列(在本例中为“姓氏”)创建值。
例如,我希望输出为:
First_Name Purchased Last_Name
0 Mark 20 S.
1 John 12 M.
2 Adam 13 C.
3 Mark 40 S.
4 Adam 23 C.
5 Jane 3 nan
6 Mark 16 S.
7 Mark 17 S.
8 Adam 10 C.
9 Jane 23 nan
有什么方法可以简单地完成所有这些功能吗?谢谢!
这应该可以解决问题:
final = pd.concat([df1, df2]).reset_index()
final.sort_values('First_Name')
final.fillna(method='ffill')
这给出了
index First_Name Purchased Last_Name
0 0 Mark 20 S.
3 3 Mark 40 S.
6 1 Mark 16 S.
7 2 Mark 17 S.
1 1 John 12 M.
5 0 Jane 3 M.
9 4 Jane 23 M.
2 2 Adam 13 C.
4 4 Adam 23 C.
8 3 Adam 10 C.
我有两个数据框,df1(例如)有 5 行和 3 列,df2 有 5 行但只有 2 列,因此:
df1 = pd.DataFrame({"First_Name":['Mark','John','Adam','Mark','Adam'], "Purchased":[20,12,13,40,23], "Last_Name":['S.','M.','C.','S.','C.'])
First_Name Purchased Last_Name
0 Mark 20 S.
1 John 12 M.
2 Adam 13 C.
3 Mark 40 S.
4 Adam 23 C.
df2 = pd.DataFrame({"First_Name":['Jane','Mark','Mark','Adam','Jane'], "Purchased":[3,16,17,10,23]})
First_Name Purchased
0 Jane 3
1 Mark 16
2 Mark 17
3 Adam 10
4 Jane 23
我想将 df2 中的行附加到 df1,同时还根据 df1 中的值为第三列(在本例中为“姓氏”)创建值。
例如,我希望输出为:
First_Name Purchased Last_Name
0 Mark 20 S.
1 John 12 M.
2 Adam 13 C.
3 Mark 40 S.
4 Adam 23 C.
5 Jane 3 nan
6 Mark 16 S.
7 Mark 17 S.
8 Adam 10 C.
9 Jane 23 nan
有什么方法可以简单地完成所有这些功能吗?谢谢!
这应该可以解决问题:
final = pd.concat([df1, df2]).reset_index()
final.sort_values('First_Name')
final.fillna(method='ffill')
这给出了
index First_Name Purchased Last_Name
0 0 Mark 20 S.
3 3 Mark 40 S.
6 1 Mark 16 S.
7 2 Mark 17 S.
1 1 John 12 M.
5 0 Jane 3 M.
9 4 Jane 23 M.
2 2 Adam 13 C.
4 4 Adam 23 C.
8 3 Adam 10 C.