我找不到办法来完成这件事。
我有一个包含n行的数据帧。
一些索引id重复(重复两次或更多)。
这是一个简化的示例:
>>> import pandas as p
>>> df = p.DataFrame({'id':['a','a','b', 'b'], 'test':['e','y','g', 's'], 'data':['re','rf','rg', 'rn']})
>>> df.set_index('id')
test data
id
a e re
a y rf
b g rg
b s rn
我需要删除重复的索引以只保留一行。不介意它是第一个、最后一个还是中间的,除非test列中的值包含在首选值列表中。你知道吗
preferred_values = ['x', 'y', 'z']
如果是这种情况,考虑到我的示例,必须保留具有首选值y的行。
因此,可能的结果是:
test data
id
a y rf
b s rn
我考虑过groupby
,但考虑到首选值的条件,我无法获得聚合的方法。
我还尝试使用groupby进程中创建的数据帧,例如:
gb = df.groupby('id')
for name, group in gb:
if len(group) > 1:
print name
print group
# modify group here
我喜欢你的groupby方法。也许有一个更简单或更多的方法,但这个畜生似乎完成了:
里面有一些潜规则。如果“首选值”列表中有多个索引,则采用第一个索引。如果首选列表中没有索引,则使用第一个索引。我认为这符合你的逻辑。你知道吗
感谢您提供示例数据,它使事情变得更加简单。你知道吗
相关问题 更多 >
编程相关推荐