mat*_*guy 5 python indexing merge dataframe pandas
我有两个数据框;第一个(df1)是:
df1 = pd.DataFrame({'col1': [0,1], 'col2': [0,1]})
df1 = df1.rename(index = {k:v for k,v in zip([0,1],['zero','one'])})
print(df1)
col1 col2
zero 0 0
one 1 1
Run Code Online (Sandbox Code Playgroud)
第二个(df2)是:
df2 = pd.DataFrame({k:v for k,v in zip(['col'+str(i) for i in range(3,10)],
[[2,3]]*7)
})
print(df2)
col3 col4 col5 col6 col7 col8 col9
0 2 2 2 2 2 2 2
1 3 3 3 3 3 3 3
Run Code Online (Sandbox Code Playgroud)
最终产品(df3)应该看起来完全像:
col1 col2 col3 col4 col5 col6 col7 col8 col9
zero 0 0 2 2 2 2 2 2 2
one 1 1 3 3 3 3 3 3 3
Run Code Online (Sandbox Code Playgroud)
这就是我这样做的方式,这对我来说有点不合乎我的口味:
df3 = df1.reset_index(drop = True)
df3 = df3.join(df2.reset_index(drop = True))
df3 = df3.rename(index = {k:v for k,v in zip(df3.index,df1.index)})
print(df3)
Run Code Online (Sandbox Code Playgroud)
是否有任何一行代码可以完成这项工作?谢谢你们
您可以df2.index通过df1.indexby创建set_index,只需两者的长度相同DataFrames:
df = df1.join(df2.set_index(df1.index))
Run Code Online (Sandbox Code Playgroud)
或者:
df = pd.concat([df1, df2.set_index(df1.index)], axis=1)
print (df)
col1 col2 col3 col4 col5 col6 col7 col8 col9
zero 0 0 2 2 2 2 2 2 2
one 1 1 3 3 3 3 3 3 3
Run Code Online (Sandbox Code Playgroud)
如果列表的长度与两个 DataFrame 相同,则传递嵌套列表以区分您想要传递列表,而不是列名称列表(df2.set_index(L)或df2.set_index(['a','b'])):
L = ['a','b']
df = pd.concat([df1.set_index([L]), df2.set_index([L])], axis=1)
print (df)
col1 col2 col3 col4 col5 col6 col7 col8 col9
a 0 0 2 2 2 2 2 2 2
b 1 1 3 3 3 3 3 3 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3019 次 |
| 最近记录: |