[英]Create a dataframe column based on values that are columns in another dataframe
我有两个数据框,第一个看起来像:
年龄 | 200 | 300 | 400 |
---|---|---|---|
1 | 34 | 32 | 50 |
2 | 42 | 73 | 20 |
第二个 dataframe 看起来像
ID | 年龄 | 分数 |
---|---|---|
10 | 2 | 200 |
23 | 1 | 300 |
我的目标是在第二个 dataframe 中创建另一个列,它通过列 Age 和 Score 的相应值从第一个 dataframe 中获取值。 分数是第一个 dataframe 中的列。
生成的 dataframe:
ID | 年龄 | 分数 | 数数 |
---|---|---|---|
10 | 2 | 200 | 42 |
23 | 1 | 300 | 32 |
尝试melt
并merge
tomerge = df1.melt('Age',var_name = 'Score',value_name='Count')
tomerge['Score'] = tomerge['Score'].astype(int)
out = df2.merge(tomerge)
out
Out[988]:
ID Age Score Count
0 10 2 200 42
1 23 1 300 32
您可以从 df2 和 map 创建一个pd.MultiIndex.from_arrays
到使用“年龄”索引创建的系列,然后是来自 df1 的堆栈。
df2.Count = pd.Series(
pd.MultiIndex.from_arrays([df2.Age, df2.Score]).map(df1.set_index('Age').stack())
)
中间输出:
df1.set_index('Age').stack()
Age
1 200 34
300 32
400 50
2 200 42
300 73
400 20
dtype: int64
pd.MultiIndex.from_arrays([df2.Age, df2.Score])
MultiIndex([(2, 200),
(1, 300)],
names=['Age', 'Score'])
打印(df2):
ID Age Score Count
0 10 2 200 42
1 23 1 300 32
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.