【发布时间】:2020-12-26 01:07:54
【问题描述】:
我想根据其他 2 个的值(列的 val1_df 和行的 val2_df)的值来索引 DataFrame (aaxx_df)。
>>> val1_df = pd.DataFrame({"A": ["aa", "bb"], "B": ["bb", "aa"]})
A B
0 aa bb
1 bb aa
>>> val2_df = pd.DataFrame({"A": ["xx", "yy"], "B": ["zz", "yy"]})
A B
0 xx zz
1 yy yy
>>> aaxx_df = pd.DataFrame(
... {"aa": [10, 20, 30], "bb": [-10, -20, -30]},
... index=["xx", "yy", "zz"]
... )
aa bb
xx 10 -10
yy 20 -20
zz 30 -30
>>> comb(val1_df, val2_df, aaxx_df)
A B
0 10.0 -30.0
1 -20.0 20.0
我在下面放了一个适合我的问题的解决方案,但我想,一定有一些更干净的解决方案,可能通过 SQL(在我看来这与关系数据库问题非常相似)。
def comb(df1, df2, link_df):
comb_df = df1.copy()
for val in link_df:
tmp_df = df2.copy()
tmp_df = tmp_df.applymap(lambda x: link_df.loc[x, val])
comb_df = comb_df.replace({val: np.nan}).combine_first(tmp_df)
return comb_df
【问题讨论】:
标签: python sql pandas dataframe combinations