Python 在dataframe中迭代列的值计数

Python 在dataframe中迭代列的值计数,python,pandas,loops,Python,Pandas,Loops,我有这个数据框: power = [0,1,2,9,9,9,9,9,9,9,8,3] df_p = pd.DataFrame(power, columns = ['power']) power 0 0 1 1 2 2 3 9 4 9 5 9 6 9 7 9 8 9 9 9 10 8 11 3 在这里,我获取了功率列的值计数,然后再次对功率和各自的值计数进行df vc_d = df_p.power.value_counts() vc_d =

我有这个数据框:

power = [0,1,2,9,9,9,9,9,9,9,8,3]
df_p = pd.DataFrame(power, columns = ['power'])

    power
0   0
1   1
2   2
3   9
4   9
5   9
6   9
7   9
8   9
9   9
10  8
11  3
在这里,我获取了功率列的值计数,然后再次对功率和各自的值计数进行df

vc_d = df_p.power.value_counts()
vc_d = pd.DataFrame (vc_d)
vc_d = vc_d.reset_index()
vc_d.columns =['power', 'counts']

    power   counts
0   9       7
1   8       1
2   3       1
3   2       1
4   1       1
5   0       1
这只是一个样本,我有大约70000个条目。我想迭代幂值,检查它在DF中的发生率。例如:

vc_d.loc[ vc_d ['power'] > 8 , 'counts'].sum() / len(power) *100

out[] 58.333333333333336

vc_d.loc[ vc_d ['power'] > 9 , 'counts'].sum() / len(power) *100

out[] 0.0
从上面可以看出,我的功率值几乎有58%大于
>8
,但只要我给出
>9
,它就是0.0。所需的输出是获得值“8”。这意味着如果超过8,则功率值不存在或数字更少,这将降低百分比


你知道怎么做吗?提前感谢。

考虑阈值为
0.5
,您可以使用查看系列中的百分比变化并应用您的逻辑:

df_p.power.value_counts().pct_change().fillna(0).abs().gt(.5).idxmax()
#8
其中:

df_p.power.value_counts().pct_change().fillna(0).abs()
给出:

9    0.000000
8    0.857143
3    0.000000
2    0.000000
1    0.000000
0    0.000000

将阈值视为
0.5
,您可以使用查看系列中的百分比变化并应用逻辑:

df_p.power.value_counts().pct_change().fillna(0).abs().gt(.5).idxmax()
#8
其中:

df_p.power.value_counts().pct_change().fillna(0).abs()
给出:

9    0.000000
8    0.857143
3    0.000000
2    0.000000
1    0.000000
0    0.000000

vc_d.loc[1,'power']
?这真的会一直实现…没关系。我需要找到电源(在本例中为8)。迭代之后,我可以发现大于9的功率为0.0%,大于8的功率为58.00。这意味着我58.00%的能量是9(>8)。@anky_91谢谢你的回答。我想找到值计数百分比变化的阈值,比如说50%。这意味着大于8的幂是58%,如果我进一步到9,它是零。这意味着功率值大于8但小于9。@Arpit您可以尝试
df_p.power.value_counts().pct_change().fillna(0).abs().gt(.5).idxmax()
?其中
.5
是阈值
vc_d.loc[1,'power']
?这真的会一直实现…没关系。我需要找到电源(在本例中为8)。迭代之后,我可以发现大于9的功率为0.0%,大于8的功率为58.00。这意味着我58.00%的能量是9(>8)。@anky_91谢谢你的回答。我想找到值计数百分比变化的阈值,比如说50%。这意味着大于8的幂是58%,如果我进一步到9,它是零。这意味着功率值大于8但小于9。@Arpit您可以尝试
df_p.power.value_counts().pct_change().fillna(0).abs().gt(.5).idxmax()
?其中
.5
是阈值