我有一个 Dataframe ,看起来像这样:
| 识别号|得分|年龄|性别问题|日期|
| - ------|- ------|- ------|- ------|- ------|
| A类|二十五|五个|男|2019年1月1日|
| A类|三十二|五个|男|2019年1月1日|
| A类|三十二|五个|男|2019年1月5日|
| B|四十五|九|F级|2019年2月1日|
| B|七十六|九|F级|2019年5月1日|
| C级|五十四|七|F级|2019年3月1日|
对于每个唯一ID,我希望确保正好有2个条目。如果ID有2个以上的条目,我希望这两个条目的日期最晚(如果出现平局,则只取任意两行和日期)。如果ID的条目少于2个,则为该ID插入/插补一行,其中分数设置为0,日期设置为该ID的最近日期,但是年龄和性别被保留(假设年龄和性别对于任何一个ID总是相同的)。
一种可能的解决方案是:
| 识别号|得分|年龄|性别问题|日期|
| - ------|- ------|- ------|- ------|- ------|
| A类|三十二|五个|男|2019年1月1日|
| A类|三十二|五个|男|2019年1月5日|
| B|四十五|九|F级|2019年2月1日|
| B|七十六|九|F级|2019年5月1日|
| C级|五十四|七|F级|2019年3月1日|
| C级|无|七|F级|2019年3月1日|
我的数据集非常大,所以使用pd.multiIndex进行多索引使我的内存很快耗尽(我使用的实际数据集大约有50万行)。
我试着实现类似的东西:How to pad on extra rows in dataframe for Neural Netowrk
但我不知道如何实现“使用最新日期”的限制。
3条答案
按热度按时间1dkrff031#
暴力
如果需要
2
以外的特定数字,请输入5
少一点野蛮,也许?
8ljdwjyq2#
让我们试试懒惰groupby和concat:
还有
head
的另一个变体:输出:
nx7onnlm3#
下面是一个方法:
首先获取每个ID的前2个
然后找到没有重复的,并使其重复
然后将其中一个赋值为0
然后concat新的df。
以下解决方案应能够处理2个以上条目: