如何在Pandas DataFrame中防止一式三份

时间:2016-07-29 03:17:56

标签: python pandas random dataframe

我有以下代码:

stim_df = pd.concat([block1,block2,bloc3,block4], axis=0, ignore_index=True).sample(frac=1).reset_index(drop=True)
stim_df.columns = ["Word","Condition"] 

#Check for triplicates: 
for j in xrange(len(stim_df)):
    if j == 0 or j == 1:
        pass
    else:
        if stim_df["Condition"][j] == stim_df["Condition"][j-1] == stim_df["Condition"][j-2]:
            stim_df[j-2:j+3] = stim_df[j-2:j+3].reindex([j-2,j-1,j+2,j,j+1])

我正在努力防止发生的是三个相邻的行,其中“条件”值相同。因此,如果我的条件是“1”,“2”和“3”,我想防止发生类似1,1,2,2,2,1,3,1的订单,其中条件值2出现三连续几次。

以下是df的一部分的快速示例:

        Condition  Word
0           1  neut
1           2   pos
2           3   neg
3           3   neg
4           3   neg
5           2   pos
6           1  neut
7           2   pos
8           2   pos
9           2   pos
10          2   pos

我的代码无法解决问题。创建一个伪随机函数会不会更好,而不是在我已经随机混合数据帧之后尝试处理它?任何帮助或建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

您是否希望生成没有重复的序列,或者只删除2,2,2之类的序列?

如果您正在寻找后者,请尝试使用diff删除重复序列。

df[~(df.Condition.diff() == 0)]

    Condition   Word
0       1       neut
1       2       pos
2       3       neg
5       2       pos
6       1       neut
7       2       pos