簡體   English   中英

DataFrame 中的新列基於來自另一個 DataFrame 的行和列

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

但是,如何基於df2df1中創建一個新列?

結果將如下所示:

    col1    col2    col3
0   E8      K4      -9
1   E6      K3      24
2   E8      K4      -9
3   E8      K4      -9
4   E8      K2      30

DataFrame.joinDataFrame.set_indexDataFrame.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.mergeDataFrame.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM