繁体   English   中英

当列名是值时,将列从矩阵添加到 DF

[英]Add column to DF from matrix when column names are values

DF1:

ID    ATR    K       
123   A      1.25
934   B      1.5
363   C      1.2
234   B      1.4

DF2:

ATR   1.0   1.2   1.25   1.3   1.4   1.5 
A     0.03  0.2   0.46   0.96  0.16  0.22  
B     0.1   0.45  0.74   0.91  0.13  0.03
C     0.04  0.79  0.01   0.80  0.67  0.11

我想在 DF1 中添加一个新列,其中包含 DF2 中的相应值。
DF2 中的列名是值(“ATR”除外)。
'NEW' 包含来自 DF1 的 ATR 和 K 与 ATR 匹配的值以及来自 DF2 的相应列名 (=K)。
例子:

ID   ATR  K 
123  A    1.25

--> (A, 1.25) in DF2: 0.46 --> 将此添加到 DF1 ID123 列“新”

如何创建一个看起来像这样的结果 DF?

ID    ATR     K      NEW   
123   A       1.25   0.46
934   B       1.5    0.03
363   C       1.2    0.79
234   B       1.4    0.13

下面的代码应该可以工作:

创建 DataFrame

df1 = pd.DataFrame({
    'ID':[123,934,363,234],
    'ATR':['A','B','C','B'],
    'K':[1.25,1.5,1.2,1.4]
})

df2 = pd.DataFrame({
     'ATR':['A','B','C'],
    1.0:[0.03, 0.1, 0.04],
    1.2:[0.2, 0.45, 0.79],
    1.25:[0.46, 0.74, 0.01],
    1.3:[0.96, 0.91, 0.80],
    1.4:[0.16, 0.13, 0.67],
    1.5:[0.22, 0.03, 0.11]

})

修改DataFrame df2

df2 = df2.set_index('ATR')
df2 = df2.unstack().reset_index().rename(columns={'level_0':'K', 0:'NEW'})

合并 DataFrames df1 和 df2

newdf = pd.merge(df1, df2, on=['ATR','K'], how='inner')
newdf

在此处输入图像描述

下面的替代解决方案,其中df2是索引设置为“ATR”的 dataframe,

df1.join(df2.stack().rename('NEW'), on=['ATR', 'K'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM