我有这样的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来解决此问题,但不确定如何实现。
答案 0 :(得分:2)
使用transform
根据groupby
ID'
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)