繁体   English   中英

Python根据另一个数据框中的多个条件添加新的列值

[英]Python add new column values based on multiple conditions in another dataframe

我有两个数据框,

df1 = pd.DataFrame({'col_A':['AA','AA','AB','AB','AA','AA','AB','AB'],  
                   'col_B':['BB','BB','BB','BB','BC','BC','BC','BC'],  
                   'col_HIGH':[10,20,10,20,10,20,10,20],  
                   'col_LOW':[0,10.0001,0,10.0001,0,10.0001,0,10.0001],  
                   'col_D':[6,16,7,17,8,18,9,19]})  
df2 = pd.DataFrame({'ID':['01','11','21','02','12','22','03','13','23','04','14','24','05','15','25','06','16','26','07','17','27','08','18','28'],  
'col_A':['AA','AA','AA','AA','AA','AA','AB','AB','AB','AB','AB','AB','AA','AA','AA','AA','AA','AA','AB','AB','AB','AB','AB','AB'],  
'col_B':['BB','BB','BB','BB','BB','BB','BB','BB','BB','BB','BB','BB','BC','BC','BC','BC','BC','BC','BC','BC','BC','BC','BC','BC',],  
'col_C':[5,7,9,15,17,19,5,7,9,15,17,19,5,7,9,15,17,19,5,7,9,15,17,19]})

我想在 df2 中创建 col_D 并使用 df1 中的 col_D 的值根据多个条件进行填充,包括来自 df1 和 df2 的 col_A 和 col_B 匹配,df2 中的 col_C 值在 df1 中的 col_HIGH 和 col_LOW 的范围内。 最快的方法是什么?

请尝试提供您要使用的条件。

  1. 如果它是一种你想要使用字典的映射
dictionary = {'AA': 100, 'BB': 200, 'BC': 300}
df['new_column'] = df['old_column'].map(dictionary)

注意:您也可以使用上面的.apply()

  1. 您还可以使用if/else条件
  df['new_column'] = ['value1' if x==100 else 'value2' for x in df['old column']]

这是将joinpd.IntervalIndex一起使用的方法:

# Create a new dataframe with MultiIndex of col_A, col_B, and pd.IntervalIndex defined by
# LOW and HIGH columns
df1i = df1.set_index(['col_A', 'col_B', pd.IntervalIndex.from_arrays(df1['col_LOW'], df1['col_HIGH'], name='col_C')])

# Use join
df_out = df2.set_index(['col_A', 'col_B', 'col_C']).join(df1i).reset_index()

输出:

   col_A col_B  col_C  ID  col_HIGH  col_LOW  col_D
0     AA    BB      5  01        10   0.0000      6
1     AA    BB      7  11        10   0.0000      6
2     AA    BB      9  21        10   0.0000      6
3     AA    BB     15  02        20  10.0001     16
4     AA    BB     17  12        20  10.0001     16
5     AA    BB     19  22        20  10.0001     16
6     AB    BB      5  03        10   0.0000      7
7     AB    BB      7  13        10   0.0000      7
8     AB    BB      9  23        10   0.0000      7
9     AB    BB     15  04        20  10.0001     17
10    AB    BB     17  14        20  10.0001     17
11    AB    BB     19  24        20  10.0001     17
12    AA    BC      5  05        10   0.0000      8
13    AA    BC      7  15        10   0.0000      8
14    AA    BC      9  25        10   0.0000      8
15    AA    BC     15  06        20  10.0001     18
16    AA    BC     17  16        20  10.0001     18
17    AA    BC     19  26        20  10.0001     18
18    AB    BC      5  07        10   0.0000      9
19    AB    BC      7  17        10   0.0000      9
20    AB    BC      9  27        10   0.0000      9
21    AB    BC     15  08        20  10.0001     19
22    AB    BC     17  18        20  10.0001     19
23    AB    BC     19  28        20  10.0001     19

输出:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM