【问题标题】:Create a new column based on conditions根据条件创建新列
【发布时间】:2020-10-02 20:04:44
【问题描述】:

这是我的数据框:

      ID  Tell  Number Animals
0       1   Yes     3    Cat
1       1   Yes     6    Pig
2       1   No      9    Dog
3       2   Yes     4    Cat
4       2   Yes     7    Pig 
5       2   No      8    Dog
6       3   Yes     15   Cat
7       3   Yes     8    Pic 
8       3   Yes      6   Dog
9       3   Yes     13   Cat

我想添加第 5 列,如果在 Tell 列中存在“No”行,则检查每个 ID。如果是,则第 5 列是对应 ID 的对应编号。如果没有带有“否”的行,则将其留空。

所以,我得到的 df 应该是这样的:

      ID  Tell  Number Animals col5
0       1   Yes     3    Cat    9
1       1   Yes     6    Pig    9
2       1   No      9    Dog    9
3       2   Yes     4    Cat    8
4       2   Yes     7    Pig    8
5       2   No      8    Dog    8
6       3   Yes     15   Cat    
7       3   Yes     8    Pic 
8       3   Yes     6    Dog
9       3   Yes     13   Cat

这是我开始的:

df.loc[df['Tell'].str.contains('No'), 'col5'] = df['Number']

请帮忙

【问题讨论】:

  • 你实际上不能把空白的东西串联起来。它应该是空字符串、nan 或零.. 或其他。

标签: python pandas


【解决方案1】:

我们可以过滤然后merge

s=df.loc[df.Tell.eq('No'),['ID','Number']].rename(columns={'Number':'Col5'})
df=df.merge(s,on='ID',how='left')
df
   ID Tell  Number Animals  col5  Col5
0   1  Yes       3     Cat   9.0   9.0
1   1  Yes       6     Pig   9.0   9.0
2   1   No       9     Dog   9.0   9.0
3   2  Yes       4     Cat   8.0   8.0
4   2  Yes       7     Pig   8.0   8.0
5   2   No       8     Dog   8.0   8.0
6   3  Yes      15     Cat   NaN   NaN
7   3  Yes       8     Pic   NaN   NaN
8   3  Yes       6     Dog   NaN   NaN
9   3  Yes      13     Cat   NaN   NaN

【讨论】:

  • 您是如何根据 OP 的数据为您的测试创建数据框的?手动?
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 2016-08-16
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多