Python 如何将函数的输出放入数据框中进行进一步分析?

Python 如何将函数的输出放入数据框中进行进一步分析?,python,pandas,Python,Pandas,我使用一个函数来找出在震级阈值之间有多少降雨事件导致洪水事件(表示为1表示洪水,0表示无洪水)。我的数据看起来有点像这样: Date rain Flood 2010-01-01 0.2 0 2010-01-02 2.7 0 2010-01-03 11.3 1 2010-01-04 0.1 0 2010-01-05 5.3 1 Threshold '1'

我使用一个函数来找出在震级阈值之间有多少降雨事件导致洪水事件(表示为1表示洪水,0表示无洪水)。我的数据看起来有点像这样:

      Date     rain      Flood
2010-01-01     0.2       0
2010-01-02     2.7       0   
2010-01-03     11.3      1 
2010-01-04     0.1       0
2010-01-05     5.3       1
Threshold     '1'     '0'
      2.5      0       2
      5.0      0       1
     10.0      1       0
     15.0      1       0
以下是我的功能:

def Thresholds(df, thresholds):
    lower, upper = thresholds
    u_mask = df['rain'] < upper 
    l_mask = df['rain'] > lower
    between = df[l_mask & u_mask]
    return between['Flood'].value_counts()

my_intervals = np.array([(0.0,2.5),(2.5,5),(5,10),(10,15),(15,20),(20,30),(30,np.inf)])

dframes = [YEAR1,YEAR2,YEAR3]

for df in dframes:
    print('\n Dataframe')
    for interval in my_intervals:
        print(Thresholds(df,interval))
然而,输出不是我可以做进一步计算的形式。例如,我想计算在每个降雨量级发生洪水的频率概率。要做到这一点,我预计需要将数据放在一个数据框中,其中包含“洪水”或“非洪水”列,以及按降雨幅度范围(在本例中标记为“阈值”)命名的行。比如说:

      Date     rain      Flood
2010-01-01     0.2       0
2010-01-02     2.7       0   
2010-01-03     11.3      1 
2010-01-04     0.1       0
2010-01-05     5.3       1
Threshold     '1'     '0'
      2.5      0       2
      5.0      0       1
     10.0      1       0
     15.0      1       0

有什么想法吗?提前非常感谢:)

这样您就可以将它们存储到
列表中
然后
concat
返回

l=[]
x=[]
for df in dframes:
    print('\n Dataframe')
    for interval in my_intervals:
        l.append(Thresholds(df,interval))
        x.append(interval[0])

pd.concat(l,axis=1,keys=x)

更新

d = []
for df in dframes:
    print('\n Dataframe')
    l = []
    x = []
    for interval in my_intervals:
        l.append(Thresholds(df,interval))
        x.append(interval[0])

    d.append(pd.concat(l,axis=1,keys=x))

pd.concat(d,keys=list(range(len(dframes))))

因此,您可以将它们存储到
列表
中,然后
concat
将其返回

l=[]
x=[]
for df in dframes:
    print('\n Dataframe')
    for interval in my_intervals:
        l.append(Thresholds(df,interval))
        x.append(interval[0])

pd.concat(l,axis=1,keys=x)

更新

d = []
for df in dframes:
    print('\n Dataframe')
    l = []
    x = []
    for interval in my_intervals:
        l.append(Thresholds(df,interval))
        x.append(interval[0])

    d.append(pd.concat(l,axis=1,keys=x))

pd.concat(d,keys=list(range(len(dframes))))

我们可以使用
groupby
pd.cut

bins = np.append(my_intervals[:, 0], my_intervals[-1, 1])

result = df.groupby([pd.cut(df['rain'], bins), 'Flood']).size().unstack().fillna(0).astype(int)

print(result)
输出:

​Flood         0  1
rain              
(0.0, 2.5]    2  0
(2.5, 5.0]    1  0
(5.0, 10.0]   0  1
(10.0, 15.0]  0  1

我们可以使用
groupby
pd.cut

bins = np.append(my_intervals[:, 0], my_intervals[-1, 1])

result = df.groupby([pd.cut(df['rain'], bins), 'Flood']).size().unstack().fillna(0).astype(int)

print(result)
输出:

​Flood         0  1
rain              
(0.0, 2.5]    2  0
(2.5, 5.0]    1  0
(5.0, 10.0]   0  1
(10.0, 15.0]  0  1

当我将其应用于我的多个数据帧(第1年、第2年、第3年等)时,这会起作用并为我产生以下结果:
0.0 2.5 5.0 10.0 15.0 20.0 30.0 0 2.5 5.0…15.0 20.0 30.0 0 2.5 5.0 10.0 15.0 20.0 30.0
0.0 304 7.0 5.0 2楠楠楠295 7 3…1.0楠楠楠62.0 5.0 2 1楠楠楠楠楠楠楠楠1.0楠楠楠楠楠楠楠楠楠楠2楠楠4 1楠楠楠楠楠楠楠楠楠楠1楠楠楠楠楠楠楠楠楠楠楠楠楠楠。你知道我每年如何将其拆分为单独的数据帧吗?grrr它会像我希望的那样输出,但是你明白我的意思吗?谢谢你的更新。您知道如何将其拆分回单独的数据帧吗?例如,我从YEAR1、YEAR2和YEAR3开始,然后应用该函数,我希望最后得到YEAR1、YEAR2和YEAR3的结果?这是有效的,对我来说,当我将其应用于多个数据帧(YEAR1、YEAR2、YEAR3等)时,会产生以下结果:
0.0 2.5 5.0 10.0 15.0 20.0 30.0 0 2.5 5.0…15.0 20.0 30.0 0 2.5 5.0 10.0 15.0 20.0 30.0
0.0 304 7.0 5.0 2楠楠楠295 7 3…1.0楠楠楠62.0 5.0 2 1楠楠楠楠楠楠楠楠1.0楠楠楠楠楠楠楠楠楠楠2楠楠4 1楠楠楠楠楠楠楠楠楠楠1楠楠楠楠楠楠楠楠楠楠楠楠楠楠。你知道我每年如何将其拆分为单独的数据帧吗?grrr它会像我希望的那样输出,但是你明白我的意思吗?谢谢你的更新。您知道如何将其拆分回单独的数据帧吗?例如,我从YEAR1、YEAR2和YEAR3开始,然后应用函数,最后是YEAR1、YEAR2和YEAR3的结果?