根据条件将值应用于数字的所有实例

时间:2015-10-12 06:58:30

标签: python python-3.x pandas

我有这样的df:

  ID     Number   
  1        0  
  1        0
  1        1
  2        0
  2        0
  3        1
  3        1
  3        0

我想对数字列中任意位置为1的任何ID应用5,对不具有1的任何ID应用0。例如,如果数字“1”出现在ID 1的Number列中的任何位置,我想在该列的每个实例的总列中放置一个5。

我想要的输出看起来像

  ID     Number    Total 
  1        0        5
  1        0        5
  1        1        5
  2        0        0
  2        0        0
  3        1        5
  3        1        5
  3        0        5

尝试考虑使用applymap来解决此问题,但不确定如何实现。

2 个答案:

答案 0 :(得分:2)

使用transform根据groupby ID'

为您的df添加列
In [6]:
df['Total'] = df.groupby('ID').transform(lambda x: 5 if (x == 1).any() else 0)
df

Out[6]:
   ID  Number  Total
0   1       0      5
1   1       0      5
2   1       1      5
3   2       0      0
4   2       0      0
5   3       1      5
6   3       1      5
7   3       0      5

答案 1 :(得分:1)

您可以在ID列上使用DataFrame.groupby(),然后获取Number列的max(),然后将其转换为字典,然后使用它创建{ {1}}列。示例 -

'Total'

演示 -

grouped = df.groupby('ID')['Number'].max().to_dict()
df['Total'] = df.apply((lambda row:5 if grouped[row['ID']] else 0), axis=1)