我有一个数据框架,它的行几乎是重复的,除了一列的值。
event = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3]
subj = [1, 1, 2, 2, 3, 3, 4, 4, 5, 6]
age = [22, 22, 56, 56, 32, 32, 48, 48, 19, 43]
sex = ['F', 'F','M',' M', 'M', 'M',' F',' F', 'F', 'M']
fruit = ['apple', 'orange', 'apple', 'orange', 'grape', 'mango', 'grape', 'mango', 'apple', 'mango']
df = pd.DataFrame(list(zip(event, subj, age, sex, fruit)),
columns =['event', 'subj', 'age', 'sex', 'fruit'])
每个受试者与两种水果(苹果/橙子或葡萄/芒果)相关联。我想省略一些行,以便每个主题只与一种水果相关联,并且每个主题与一种不同的水果相关联。
这是我想要的最终数据帧的样子:
event = [1, 1, 2, 2, 3, 3]
subj = [1, 2, 3, 4, 5, 6]
age = [22, 56, 32, 48, 19, 43]
sex = ['F', 'M', 'M', 'F', 'F', 'M']
fruit = ['apple', 'orange', 'grape', 'mango', 'apple', 'mango']
df_new = df = pd.DataFrame(list(zip(event, subj, age, sex, fruit)),
columns =['event', 'subj', 'age', 'sex', 'fruit'])
我有数千行,不知道哪些行是"几乎重复的"。我试过使用.duplicate()基于一个子集,但它只允许我保持第一个或最后一个,所以不同的主题最终与相同的水果(例如,主题1和2与'苹果'和主题3和4与'葡萄')。
我对熊猫不熟悉,任何帮助都将非常感激。
编辑:为了澄清我问题中的一些含糊之处——在每个事件中,主题应该是唯一的。活动内的主题应与不同的水果相关联。每个事件可以有两个以上的主题,但每个主题不应与一个以上的事件相关联(例如,如果主题1出现在事件1中,则不应出现在其他事件中)。
应该可以:
df['check'] = (
df.groupby(["event"])
.apply(lambda x: x['fruit'].shift(1)==x['fruit'].shift(-1))
.reset_index(drop=True)
)
df=df[df['check']==False].drop(['check'],axis=1)
print(df)
'''
event subj age sex fruit
0 1 1 22 F apple
3 1 2 56 M orange
4 2 3 32 M grape
7 2 4 48 F mango
8 3 5 19 F apple
9 3 6 43 M mango
'''