预期结果
我有一个数据表,如下所示:
我想把这个表转换成这样:
问题描述
ID
和Event#
字段是表示表中一个唯一条目的复合键。
条目可以重复两次或更多次。但是一些行值分布在重复项之间。而且我并不总是知道那些行值是在“第一个”、“最后一个”还是一些“中间”重复项中找到的。
我想删除重复的条目,同时保留所有填充的行值,而不管它们在重复条目中的分布位置。
我该如何对待Pandas
看了一些SO的帖子,我觉得我需要使用groupby
和fillna
或ffill
/bfill
。但是我是Pandas的新手,不明白在这种情况下我怎么能让它工作:
1.使用复合键区分行
1.存在多个重复行的示例
1.分布在这些重复项中的多个字段中存在有效数据
1.我并不总是知道有效的行数据是位于“第一个”、“最后一个”还是某个“中间”副本中
数据框如下:
df = pd.DataFrame([['ABC111', 1, '1/1/23 12:00:00', None, '1/1/23 13:30:00', None],
['ABC111', 2, '1/2/23 00:00:00', None, '1/2/23 13:30:00', None],
['ABC111', 3, '1/3/23 00:00:00', None, '1/3/23 13:30:00', None],
['ABC112', 1, '1/1/23 00:00:00', None, '1/1/23 13:30:00', None],
['ABC112', 2, '1/2/23 00:00:00', 'Test Value A', None, None],
['ABC112', 2, '1/2/23 00:00:00', 'Test Value A', None, None],
['ABC112', 2, None, None, '1/2/23 13:30:00', 'Test Value B'],
['ABC113', 1, '1/1/23 00:00:00', None, '1/1/23 13:30:00', None],
['ABC113', 2, '1/2/23 00:00:00', None, '1/2/23 13:30:00', None],
['ABC113', 3, None, None, '1/3/23 13:30:00', 'Test Value B'],
['ABC113', 3, '1/3/23 00:00:00', 'Test Value A', None, None],
['ABC114', 1, '1/1/23 00:00:00', 'Test Value A', None, None],
['ABC114', 1, None, None, '1/1/23 13:30:00', 'Test Value B'],
['ABC114', 1, None, None, '1/1/23 13:30:00', 'Test Value B'],
['ABC114', 1, None, None, '1/1/23 13:30:00', 'Test Value B'],
['ABC114', 1, None, None, '1/1/23 13:30:00', 'Test Value B'],
['ABC114', 2, '1/2/23 00:00:00', None, '1/2/23 13:30:00', None],
['ABC114', 3, '1/3/23 00:00:00', None, '1/3/23 13:30:00', None]],
columns=['ID', 'Event #', 'Start Date', 'Start Value', 'End Date', 'End Value'])
这篇文章是我能找到的最接近的潜在解决方案:Pandas: filling missing values by mean in each group
1条答案
按热度按时间wkyowqbh1#
看起来您需要
groupby.first
:输出: