Python 如何计算特定类间隔内给定数据帧列中每个值的出现次数?

Python 如何计算特定类间隔内给定数据帧列中每个值的出现次数?,python,pandas,dataframe,datadesign,Python,Pandas,Dataframe,Datadesign,这是我在stackoverflow的第一个问题 我有两个不同大小的数据帧df1(266808行)和df2(201行)。 及 我想将df1['WS_140m']中每个值/数字的计数附加到df2['count']中,如果数字落在df2['class_interval']中给定的类间隔中 我试过了 (一) (二) (三) 如果有人知道,请引导 请尝试以下方法: def在_类_间隔内(值,间隔): #待办事项 def在_类_间隔_闭合(间隔): 返回λx:in_类_间隔(x,间隔) df2['co

这是我在stackoverflow的第一个问题

我有两个不同大小的数据帧
df1
(266808行)和
df2
(201行)。

我想将
df1['WS_140m']
中每个值/数字的计数附加到
df2['count']
中,如果数字落在
df2['class_interval']
中给定的类间隔中

我试过了

(一)

(二)

(三)


如果有人知道,请引导

请尝试以下方法:


def在_类_间隔内(值,间隔):
#待办事项
def在_类_间隔_闭合(间隔):
返回λx:in_类_间隔(x,间隔)
df2['count']=df2['Class_interval']
.apply(λx:df1[在类内间隔内闭合(x)(df1['WS\u 140m']))。大小,轴=1)

在\u class\u interval(value,interval)中定义函数
,该函数返回布尔值。

请尝试以下操作:


def在_类_间隔内(值,间隔):
#待办事项
def在_类_间隔_闭合(间隔):
返回λx:in_类_间隔(x,间隔)
df2['count']=df2['Class_interval']
.apply(λx:df1[在类内间隔内闭合(x)(df1['WS\u 140m']))。大小,轴=1)

在\u class\u interval(value,interval)
中定义函数
,该函数返回布尔值。

我想这样做可以:

In [330]: df1                                                                                                                                                                                               
Out[330]: 
   WS_140m
0     5.10
1     5.16
2     5.98
3     5.58
4     4.81

In [445]: df2                                                                                                                                                                                               
Out[445]: 
   count Class_interval
0      0            NaN
1      0    (0.05,0.15]
2      0    (0.15,0.25]
3      0    (0.25,0.35]
4      0    (3.95,5.15]

In [446]: df2.Class_interval = df2.Class_interval.str.replace(']', ')')

In [451]: from ast import literal_eval
In [449]: for i, v in df2.Class_interval.iteritems(): 
     ...:     if pd.notnull(v): 
     ...:         df2.at[i, 'Class_interval'] = literal_eval(df2.Class_interval[i]) 

In [342]: df2['falls_in_range'] = df1.WS_140m.between(df2.Class_interval.str[0], df2.Class_interval.str[1])                                                                                                 
如果
True
出现以下情况,则可以增加计数:
我想像这样的事情可以做到:

In [330]: df1                                                                                                                                                                                               
Out[330]: 
   WS_140m
0     5.10
1     5.16
2     5.98
3     5.58
4     4.81

In [445]: df2                                                                                                                                                                                               
Out[445]: 
   count Class_interval
0      0            NaN
1      0    (0.05,0.15]
2      0    (0.15,0.25]
3      0    (0.25,0.35]
4      0    (3.95,5.15]

In [446]: df2.Class_interval = df2.Class_interval.str.replace(']', ')')

In [451]: from ast import literal_eval
In [449]: for i, v in df2.Class_interval.iteritems(): 
     ...:     if pd.notnull(v): 
     ...:         df2.at[i, 'Class_interval'] = literal_eval(df2.Class_interval[i]) 

In [342]: df2['falls_in_range'] = df1.WS_140m.between(df2.Class_interval.str[0], df2.Class_interval.str[1])                                                                                                 
如果
True
出现以下情况,则可以增加计数:
你能展示一个通用的输入示例和预期的输出吗?@Jeroen举个例子,如果df1['WS_140m']在class_间隔(0.05,0.15)中有327个值,在class_间隔(0.15,0.25)中有400个值,那么df2的输出在df2['count']中应该是这样的对于df2的每个类间隔,依此类推。链接中的示例。您能显示一个通用输入示例和预期输出吗?@Jeroen例如,如果df1['WS_140m']在类间隔中有327个值(0.05,0.15),在类间隔中有400个值(0.15,0.25),df2的输出在df2['count']中应该是这样的对于df2的每个类间隔,依此类推。链接中的示例。您好,您使用的是关闭间隔,例如(0.05,0.15),而我使用的是打开间隔,例如(0.05,0.15)。您知道我如何解决此问题吗。@Arslandeelurrehman是的,修复了此问题。请检查我更新的答案。您好,您使用的是关闭间隔,例如(0.05,0.15),而我使用的是打开间隔,例如(0.05,0.15)。你知道我如何解决这个问题吗。@ArslanAdeelUrRehman是的,已经解决了。请检查我的更新答案。
for anum in df1['WS_140m']:
    if anum in df2['Class_interval']:
        df2['count'] = df2['count'] + 1
In [330]: df1                                                                                                                                                                                               
Out[330]: 
   WS_140m
0     5.10
1     5.16
2     5.98
3     5.58
4     4.81

In [445]: df2                                                                                                                                                                                               
Out[445]: 
   count Class_interval
0      0            NaN
1      0    (0.05,0.15]
2      0    (0.15,0.25]
3      0    (0.25,0.35]
4      0    (3.95,5.15]

In [446]: df2.Class_interval = df2.Class_interval.str.replace(']', ')')

In [451]: from ast import literal_eval
In [449]: for i, v in df2.Class_interval.iteritems(): 
     ...:     if pd.notnull(v): 
     ...:         df2.at[i, 'Class_interval'] = literal_eval(df2.Class_interval[i]) 

In [342]: df2['falls_in_range'] = df1.WS_140m.between(df2.Class_interval.str[0], df2.Class_interval.str[1])                                                                                                 
In [360]: df2['count'] = df2.loc[df2.index[df2['falls_in_range'] == True].tolist()]['count'] +1                                                                                                             

In [361]: df2                                                                                                                                                                                               
Out[361]: 
   count Class_interval  falls_in_range
0    NaN            NaN           False
1    NaN   (0.05, 0.15)           False
2    NaN   (0.15, 0.25)           False
3    NaN   (0.25, 0.35)           False
4    1.0   (3.95, 5.15)            True