Python 如何计算特定类间隔内给定数据帧列中每个值的出现次数?
这是我在stackoverflow的第一个问题 我有两个不同大小的数据帧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
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