【发布时间】:2020-12-04 01:00:27
【问题描述】:
我有一个像下面这样的 DF
df = pd.DataFrame({'category' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
'size': [20, 0, 10, 30, 30, 0, 0, 10],
'price': [5, 0, 2, 10, 10, 0, 0, 3],
'flag' : [0,0,0,0,0,0,0,0]
})
我想将 ['size'] 列中的 0 更改为类别的最大值,所以
df['size'] = np.where(df['size'].eq(0), df.groupby('category')['size'].transform('max'), df['size'])
df['price'] = np.where(df['price'].eq(0), df.groupby('category')['price'].transform('max'), df['price'])
输出会是这样的
df = pd.DataFrame({'category' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
'size': [20, 20, 10, 30, 30, 30, 10, 10],
'price': [5, 5, 2, 10, 10, 10, 3, 3],
'flag' : [0,0,0,0,0,0,0,0]
})
(目前已确认的过程)
但现在我想知道哪一行已更改,因此我分配了一个 ['flag'] 列,并希望在同一行中的任何其他值已更改时将值 0 更改为 1。 所以想要的输出如下所示
df = pd.DataFrame({'category' : ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
'size': [20, 20, 10, 30, 30, 30, 10, 10],
'price': [5, 5, 2, 10, 10, 10, 3, 3],
'flag' : [0,1,0,0,0,1,1,0]
})
无论如何我可以用转换语句做这一行吗?还是有什么好办法?
【问题讨论】:
标签: python python-3.x pandas numpy dataframe