我必须使用不同大小的多维数据帧
import pandas as pd
import numpy as np
default_entries = ['VOD','APPL','MSFT','PGO']
join_entries = ['VOD','MSFT','PGO']
df_join = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=join_entries, columns=join_entries)
df_default = pd.DataFrame(np.zeros((4,4)),index=default_entries, columns=default_entries)
这给了我这个
VOD MSFT PGO
VOD 1 2 3
MSFT 4 5 6
PGO 7 8 9
和
VOD APPL MSFT PGO
VOD 0 0 0 0
APPL 0 0 0 0
MSFT 0 0 0 0
PGO 0 0 0 0
我现在想将两个帧合并为一个看起来像这个
的新帧 VOD APPL MSFT PGO
VOD 1 0 2 3
APPL 0 0 0 0
MSFT 4 0 5 6
PGO 7 0 8 9
我基本上希望我的默认df能够填充连接df中缺少的值,原因是在保留元素顺序的同时重新缩放数据帧。
我试过
pd.merge(default_entries, join_entries, on = default_entries.index, how='outer')
但它似乎不喜欢尺寸。如果有人知道一个更优雅的解决方案,而不是建立一个很棒的循环。
答案 0 :(得分:1)
您可以使用:
df_default.add(df_join)
output:
APPL MSFT PGO VOD
APPL NaN NaN NaN NaN
MSFT NaN 5.0 6.0 4.0
PGO NaN 8.0 9.0 7.0
VOD NaN 2.0 3.0 1.0
处理订单:
new_df = df_default.add(df_join, fill_value = 0)
new_df = new_df[df_default.columns.tolist()]
new_df = new_df.reindex(index=df_default.columns.tolist())
print new_df
VOD APPL MSFT PGO
VOD 1.0 0.0 2.0 3.0
APPL 0.0 0.0 0.0 0.0
MSFT 4.0 0.0 5.0 6.0
PGO 7.0 0.0 8.0 9.0
由@Ted Petrou提供,在.add语句中使用fill_value = 0.将NaN值填充为0。