计算使用Python连续重复值的次数

时间:2018-02-24 22:48:55

标签: python pandas

我正在尝试迭代pandas数据框中的一行,检查是否有任何类似的值,如果有相似的值,我想计算重复该值的次数而忽略第一次并将其记录下来一栏。

输入:

pd.DataFrame(
    [['K1', 'K2', 'K1', 'R3', 'R1', 'K3'], 
     ['K2', 'K4', 'K4', 'R2', 'R2' ,'R2']], 
    columns=list('ASDFEI')
)

    A   S   D   F   E   I
0  K1  K2  K1  R3  R1  K3
1  K2  K4  K4  R2  R2  R2

该链接包含显示我要执行的操作的图像。在第一行中,只有K1重复一次,因此计数为1.在第二行中,K4重复一次,R2重复两次,因此计数为3.

enter image description here

2 个答案:

答案 0 :(得分:3)

这应该有效:

# Insert column count with count of duplicated (keep=First is default)
df.insert(0,'Count', df.T.apply(pd.Series.duplicated).sum())

print(df)

返回

   Count   A   S   D   F   E   I
0      1  K1  K2  K1  R3  R1  K3
1      3  K2  K4  K4  R2  R2  R2

更新:您可以使用pd.Series.isin()和~创建一个布尔掩码,以滤除不需要的结果。

  • 使用axis = 1迭代行
  • 使用sum(axis = 1)计算行数
  • 使用astype(int)转换为float
# Create new Series with count of duplicated (keep=First is default)
newcol = (df.apply(lambda x: x[~x.isin(['TK',np.NaN])]
           .duplicated(), axis=1).sum(axis=1).astype(int))

# Insert column
df.insert(0,'Count', newcol)

print(df)

返回:

   Count   A    S    D   F   E   I
0      1  K1   TK   K1  R3  TK  K3
1      2  K2  NaN  NaN  R2  R2  R2

答案 1 :(得分:3)

IIUC,您可以stack自己的框架并致电groupby + value_counts

df['Count'] = (df.stack().groupby(level=0).value_counts() - 1).sum(level=0)
df

    A   S   D   F   E   I  Count
0  K1  K2  K1  R3  R1  K3      1
1  K2  K4  K4  R2  R2  R2      3

或者,使用insert(如@Anton vBR所示),

df.insert(
    0, 'Count', (df.stack().groupby(level=0).value_counts() - 1).sum(level=0)
)
df

   Count   A   S   D   F   E   I
0      1  K1  K2  K1  R3  R1  K3
1      3  K2  K4  K4  R2  R2  R2