这个有点不同,我在任何地方都找不到它。即使是好的老ChatGPT也卡住了,所以问真实的的人类。
我有这样一个 Dataframe :
| oldVoucherId|价值购买|剩余值|
| --------------|--------------|--------------|
| 1|六十||
| 1||五十|
| 1||四十|
| 二|七十||
| 二||六十|
| 二||0|
| 五|五十||
| 五||四十五|
| 五||0|
| 三|四十||
| 三||0|
| 八|五十||
| 九|七十||
我希望Pandas删除任何行,共享一个凭证ID,有一个0值剩余。
所以完成后看起来像这样:
| oldVoucherId|价值购买|剩余值|
| --------------|--------------|--------------|
| 1||四十|
| 八||五十|
| 九||七十|
在这种情况下,代金券1仍然剩余40美元,并且代金券8和9从未使用过,因此它们也需要保留。
如果valueRemainging的条件设置为0,我如何才能让PANDAS删除共享相同凭证ID的那些行?
太感谢你了...
更新:此示例数据应该可以工作:
data = {'oldVoucherId': ['1', '1', '1', '2', '2', '2', '5', '5', '5', '3', '3', '8', '9'],
'valuePurchased': ['60','','','70','','','50','','','40','','50','70'],
'valueRemaining': ['','50','40','','60','0','','45','0','','0','','']}
df = pd.DataFrame(data)
2条答案
按热度按时间gz5pxeao1#
你没有提供数据框的方式,我可以很容易地创建它,并与它弄乱。所以这只是一个猜测。
我会执行groupby + filter操作
nx7onnlm2#
可以比较
0
字符串:另一种方法是转换为数字并比较
0
数字:然后,如果
ids
中不存在oldVoucherId
,则通过boolean indexing
使用Series.isin
过滤所有oldVoucherId
,并通过~
反转掩码:对于预期的输出,删除重复项并保留最后一个值:
将
valueRemaining
中的缺失值替换为valuePurchased
,并将NaN
s设置为valuePurchased
: