计算使用Python在一行中重复值的次数

By simon at 2018-02-28 • 0人收藏 • 22人看过

我试图遍历熊猫数据框中的一行,检查是否存在 是否有类似的值,如果有类似的值价值观,我想数一数 无论第一次重复价值多次并记录下来 一列。 输入:

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. I在第二行中,重复K4 一次,R2重复两次,所以计数为3。 ![enter image description 这里](HTTPS://i.stack.imgur.com/dWtTg.png)

2 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

这应该工作:

# 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()和创建布尔掩码 ~来过滤不需要的结果。   使用轴= 1遍历行   使用sum(axis = 1)来计算行的总和*使用astype(int)来转换为浮点数


# 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

2018-02-28   #2

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(如@Anto所示n 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

登录后方可回帖

Loading...