【问题标题】:how to set the column value of one dataframe depending on whether the value in another column is included in the specific column of another dataframe如何根据另一列中的值是否包含在另一个数据框的特定列中来设置一个数据框的列值
【发布时间】:2019-09-18 06:03:44
【问题描述】:

如何根据数据框另一列中的值是否包含在另一个数据框的特定列中来设置数据框一列的值。如果包含,则数字为 1,如果不包含,则为 0。例如:我有两个数据框:

a={'age':[22,38,26,62,198,27],'no':[1,2,3,4,5,6]} 


TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen','Mary','Celina','Roger'],
'age': [22,38,26,35,41,22,38],
'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
'survived?': [False, True, True, False, True, False, True]}

我想检查a的'age'列中的每个数字是否包含在TableB的'age'列中,如果包含,则在a中添加'Observer'列并将值设置为1,如果不是,0。

I have tried this:

a['age'].isin(TableB['age'].set_value('Observer',1)

预期的结果如下,但是我的结果是a的observer列的所有值都是1。

a={'age':[22,38,26,62,198,27],'no':[1,2,3,4,5,6],'observer':[1,1,1,0,0,0]}

【问题讨论】:

  • a={'age':[22,38,26,62,198,27],'no':[1,2,3]} 你是如何将其转换为数据框的?
  • 抱歉打错了,我已经改正了

标签: python python-3.x pandas merge anaconda


【解决方案1】:
a={'age':[22,38,26,62,198,27],'no':[1,2,3,4,5,6]} 
a = pd.DataFrame(a)
print (a)
   age  no
0   22   1
1   38   2
2   26   3
3   62   4
4  198   5
5   27   6

TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen','Mary','Celina','Roger'],
'age': [22,38,26,35,41,22,38],
'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
'survived?': [False, True, True, False, True, False, True]}

TableB = pd.DataFrame(TableB)
print (TableB)
        name  age   fare  survived?
0     Braund   22   7.25      False
1   Cummings   38  71.83       True
2  Heikkinen   26   0.00       True
3      Allen   35   8.05      False
4       Mary   41   7.00       True
5     Celina   22   6.05      False
6      Roger   38   6.00       True

对于True/False1/0 的映射,您可以将布尔掩码转换为整数:

a['observer'] = a['age'].isin(TableB['age']).astype(int)

替代解决方案是使用numpy.where:

a['observer'] = np.where(a['age'].isin(TableB['age']), 1, 0)
print (a)
   age  no  observer
0   22   1         1
1   38   2         1
2   26   3         1
3   62   4         0
4  198   5         0
5   27   6         0

如果使用字典,则使用if-else 的列表理解并通过in 测试成员资格:

a={'age':[22,38,26,62,198,27],'no':[1,2,3,4,5,6]} 

TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen','Mary','Celina','Roger'],
'age': [22,38,26,35,41,22,38],
'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
'survived?': [False, True, True, False, True, False, True]}


a['observer'] = [1 if x in TableB['age'] else 0 for x in a['age']]
print (a)
{'age': [22, 38, 26, 62, 198, 27], 'no': [1, 2, 3, 4, 5, 6], 'observer': [1, 1, 1, 0, 0, 0]}

【讨论】:

    【解决方案2】:
    a={'age':[22,38,26,62,198,27],'no':[1,2,3,4,5,6]} 
    TableB= {'name': ['Braund', 'Cummings', 'Heikkinen', 'Allen'],
    'age': [22,38,26,35,41,22,38],
    'fare': [7.25, 71.83, 0 , 8.05,7,6.05,6], 
    'survived?': [False, True, True, False, True, False, True]}
     a['observer']=[];
    
    for i in a['age']:
      if i in  TableB['age'] :
         a['observer'].append(1)
      else :
          a['observer'].append(0)
    

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 2022-01-26
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多