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