[英]New column in DataFrame based on rows and columns from another DataFrame
我有兩個 pandas 數據幀。
df1
col1 col2
0 E8 K4
1 E6 K3
2 E8 K4
3 E8 K4
4 E8 K2
df2
group K1 K2 K3 K4
0 E6 -2 -90 24 -23
1 E7 94 -34 3 22
2 E8 7 30 100 -9
在df2
中,對於E8 K4
,值為
df2.loc[df2['group'] == 'E8']['K4'].item()
-9
但是,如何基於df2
在df1
中創建一個新列?
結果將如下所示:
col1 col2 col3
0 E8 K4 -9
1 E6 K3 24
2 E8 K4 -9
3 E8 K4 -9
4 E8 K2 30
將DataFrame.join
與DataFrame.set_index
和DataFrame.stack
的重整值一起用於MultiIndex Series
:
df = df1.join(df2.set_index('group').stack().rename('col3'), on=['col1','col2'])
print (df)
col1 col2 col3
0 E8 K4 -9
1 E6 K3 24
2 E8 K4 -9
3 E8 K4 -9
4 E8 K2 30
DataFrame.merge
, DataFrame.melt
的另一個想法並重命名:
df = df1.merge(df2.melt('group', var_name='col2', value_name='col3')
.rename(columns={'group':'col1'}), on= ['col1','col2'], how='left')
print (df)
col1 col2 col3
0 E8 K4 -9
1 E6 K3 24
2 E8 K4 -9
3 E8 K4 -9
4 E8 K2 30
正如Pandas 文檔所建議的那樣,您可以使用melt
function for df2
輕松獲得所需的 output:
df2 = pd.DataFrame({'group': {0: 'E6', 1: 'E7', 2: 'E8'},
'K1': {0: -2, 1: 94, 2: 7},
'K2': {0: -90, 1: -34, 2: 30},
'K3': {0: 24, 1: 3, 2: 100},
'K4': {0: -23, 1: 22, 2: -9}})
pd.melt(df2, id_vars=['group'], value_vars=['K1', 'K2', 'K3', 'K4'])
返回:
group variable value
0 E6 K1 -2
1 E7 K1 94
2 E8 K1 7
3 E6 K2 -90
4 E7 K2 -34
5 E8 K2 30
6 E6 K3 24
7 E7 K3 3
8 E8 K3 100
9 E6 K4 -23
10 E7 K4 22
11 E8 K4 -9
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.