我需要检查pandas数据框列中是否多次存在特定值。这是基本代码;
for index, row in df_x.iterrows():
try:
if row[1] in df_y['b'].values:
# if row[1] exists in df_y i want to know how many time is it repeated, or if it is unique or not
except Exception as e:
print('Error ', e)
答案 0 :(得分:0)
如果您特别关心第一行中的值出现多少次:
np.random.seed(2)
df = pd.DataFrame({'a':np.random.rand(10) // .1,
'b':np.random.rand(10) // .01,
'c':np.random.choice(['A','B','C', 'D', 'E'], 10)})
df['c'].value_counts()[df.loc[0,'c']]
df
:
a b c
0 7.0 11.0 B
1 5.0 14.0 D
2 1.0 85.0 A
3 3.0 50.0 C
4 4.0 21.0 B
5 6.0 99.0 E
6 7.0 31.0 A
7 6.0 25.0 B
8 6.0 80.0 B
9 9.0 35.0 B
df['c'].value_counts()[df.loc[0,'c']]
返回5
(非唯一),而
df['c'].value_counts()[df.loc[5,'c']]
返回1
。如果您要查找的行是np.nan
,以此类推,则可能需要添加一些异常处理。
答案 1 :(得分:0)
Pandas可以帮助您避免循环。熊猫提供了许多功能来帮助您实现这一目标
例如
import pandas as pd
# data
df = pd.DataFrame({'uni':[1,2,3,4],'not_uni':[2,2,1,3]})
# value_counts
print(df['uni'].value_counts())
print(df['not_uni'].value_counts())
这将计算值。唯一值的值为1,非唯一值的值大于1。
如您所见,在uni列中只有1,因为没有重复的值,在not_uni列中将有2,它重复了两次。
答案 2 :(得分:0)
您可以使用Series
/ Dataframe
方法isin
,然后使用sum
来计数发生次数。
以您的示例为例:
for index, row in df_x.iterrows():
try:
count = df_y['b'].isin([row[1]]).sum()
print("df_y['b'] contains {} times the value {}".format(count, row[1]))
except Exception as e:
print('Error ', e)
但这并不是真正有效的方法,因为您将为每个b
的值遍历df_y
的{{1}}列。
首先,您可以在父列中执行row[1]
,以避免多次计数相同的值,其次,使用带有unique
的东西可以避免很多循环。您可以使您的问题更清楚一些,以便我们可以确切知道您的要求,因为这对我来说还不是很清楚。
答案 3 :(得分:0)
以下代码将为您提供col
列中的重复值:
list(df["col"].value_counts()[df["col"].value_counts() > 1].index)
答案 4 :(得分:0)
您有一个由df命名的DataFrame 因此,您想知道以“ spec_col”命名的特定列包含唯一值
import pandas as pd
pd.Series(df["spec_col"]).is_unique
>>> True
答案 5 :(得分:0)
我需要做同样的事情,但是我想有更好的方法,例如先清理并更好地更改熊猫数据框。
反正这是我的解决方法
np.sum(df[df['col_name'] == value]['col_name'].value_counts())
这可为您提供 col_name 列中重复值( 值 )的计数。