Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于另一个数据帧的列值打印一个数据帧的列值_Python_Pandas_Numpy_Matplotlib_Math - Fatal编程技术网

Python 基于另一个数据帧的列值打印一个数据帧的列值

Python 基于另一个数据帧的列值打印一个数据帧的列值,python,pandas,numpy,matplotlib,math,Python,Pandas,Numpy,Matplotlib,Math,这是我的第一个数据帧df1。在列中,开始DOY和结束DOY,例如3.0和6.0,我想通过将另一个数据帧df2的列值与列DOY匹配来打印该列值Bz、Vsw等。下面是一个简单的教程,介绍如何执行此操作: from pandas import DataFrame if __name__ == '__main__': data1 = {'Starting DOY': [3.0, 3.0, 13.0], 'Ending DOY': [6.0, 6.0, 15.0]}


这是我的第一个数据帧df1。在列中,开始DOY和结束DOY,例如3.0和6.0,我想通过将另一个数据帧df2的列值与列DOY匹配来打印该列值Bz、Vsw等。下面是一个简单的教程,介绍如何执行此操作:

from pandas import DataFrame

if __name__ == '__main__':
    data1 = {'Starting DOY': [3.0, 3.0, 13.0],
             'Ending DOY': [6.0, 6.0, 15.0]}

    data2 = {'YEAR': [1975, 1975, 1975],
             'DOY': [1.0, 3.0, 6.0],
             'HR': [0, 1, 2],
             'By': [-7.5, -4.0, -3.6],
             'Bz': [0.2, 2.4, -2.3],
             'Nsw': [999.9, 6.2, 5.9],
             'Vsw': [9999.0, 476.0, 482.0],
             'AE': [181, 138, 86]}

    df1 = DataFrame(data1, columns=['Starting DOY',
                                    'Ending DOY'])

    df2 = DataFrame(data2, columns=['YEAR', 'DOY',
                                    'HR', 'By', 'Bz',
                                    'Nsw', 'Vsw', 'AE'])

    for doy in df1.values:
        start_doy = doy[0]
        end_doy = doy[1]
        for val in df2.values:
            year = val[0]
            current_doy = val[1]
            hr = val[2]
            By = val[3]
            Bz = val[4]
            Nsw = val[5]
            Vsw = val[6]
            AE = val[7]
            if start_doy <= current_doy <= end_doy:
                print("For DOY {}".format(current_doy))
                print("By: {}".format(By))
                print("Bz: {}".format(Bz))
                print("Vsw: {}".format(Vsw))
                print("--------------------")

下面是一个简单的教程,介绍如何进行此操作:

from pandas import DataFrame

if __name__ == '__main__':
    data1 = {'Starting DOY': [3.0, 3.0, 13.0],
             'Ending DOY': [6.0, 6.0, 15.0]}

    data2 = {'YEAR': [1975, 1975, 1975],
             'DOY': [1.0, 3.0, 6.0],
             'HR': [0, 1, 2],
             'By': [-7.5, -4.0, -3.6],
             'Bz': [0.2, 2.4, -2.3],
             'Nsw': [999.9, 6.2, 5.9],
             'Vsw': [9999.0, 476.0, 482.0],
             'AE': [181, 138, 86]}

    df1 = DataFrame(data1, columns=['Starting DOY',
                                    'Ending DOY'])

    df2 = DataFrame(data2, columns=['YEAR', 'DOY',
                                    'HR', 'By', 'Bz',
                                    'Nsw', 'Vsw', 'AE'])

    for doy in df1.values:
        start_doy = doy[0]
        end_doy = doy[1]
        for val in df2.values:
            year = val[0]
            current_doy = val[1]
            hr = val[2]
            By = val[3]
            Bz = val[4]
            Nsw = val[5]
            Vsw = val[6]
            AE = val[7]
            if start_doy <= current_doy <= end_doy:
                print("For DOY {}".format(current_doy))
                print("By: {}".format(By))
                print("Bz: {}".format(Bz))
                print("Vsw: {}".format(Vsw))
                print("--------------------")

我认为最简单的方法是:

>>> df1 = pd.DataFrame([[1,2],[3,4],[5,6]], columns=["Starting DOY", "Ending DOY"])
>>> df2 = pd.DataFrame([[6,5,8, 1.5],[4,3,9, 3.5],[2,1,5, 5.5]], columns=["By", "Bz", "Vsw", "DOY"])
>>> df1.apply(lambda row: df2[(df2['DOY'] >= row[0]) & (df2['DOY'] <= row[1])], axis=1)
0       By  Bz  Vsw  DOY
0   6   5    8  1.5
1       By  Bz  Vsw  DOY
1   4   3    9  3.5
2       By  Bz  Vsw  DOY
2   2   1    5  5.5
dtype: object
>df1=pd.DataFrame([[1,2]、[3,4]、[5,6]],columns=[“起始DOY”、“结束DOY”])
>>>df2=pd.DataFrame([[6,5,8,1.5],[4,3,9,3.5],[2,1,5,5.5]),列=[“By”,“Bz”,“Vsw”,“DOY”])

>>>df1.apply(lambda行:df2[(df2['DOY']>=row[0])&(df2['DOY']]我认为最简单的方法是:

>>> df1 = pd.DataFrame([[1,2],[3,4],[5,6]], columns=["Starting DOY", "Ending DOY"])
>>> df2 = pd.DataFrame([[6,5,8, 1.5],[4,3,9, 3.5],[2,1,5, 5.5]], columns=["By", "Bz", "Vsw", "DOY"])
>>> df1.apply(lambda row: df2[(df2['DOY'] >= row[0]) & (df2['DOY'] <= row[1])], axis=1)
0       By  Bz  Vsw  DOY
0   6   5    8  1.5
1       By  Bz  Vsw  DOY
1   4   3    9  3.5
2       By  Bz  Vsw  DOY
2   2   1    5  5.5
dtype: object
>df1=pd.DataFrame([[1,2]、[3,4]、[5,6]],columns=[“起始DOY”、“结束DOY”])
>>>df2=pd.DataFrame([[6,5,8,1.5],[4,3,9,3.5],[2,1,5,5.5]),列=[“By”,“Bz”,“Vsw”,“DOY”])

>>>df1.apply(lambda row:df2[(df2['DOY']>=row[0])&(df2['DOY'])顺便说一句,欢迎来到社区。请不要发布图像;发布数据和代码,这样我们可以轻松地复制问题。顺便说一句,欢迎来到社区。请不要发布图像;发布数据和代码,这样我们可以轻松地复制问题。