[英]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.