Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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_Csv_Max - Fatal编程技术网

Python 在一列中查找时间点,同时在另一列中读取最大值

Python 在一列中查找时间点,同时在另一列中读取最大值,python,pandas,numpy,csv,max,Python,Pandas,Numpy,Csv,Max,我有一个普遍的问题,我想在某一列中找到一个值(例如a),一旦找到它,我想读取同一行但在不同列中的值(例如B)。请注意,我通常有300个长名称的列(例如TIME=2020-02-26 13:13:29) 以下是我的一些数据的样子: Time (min) Fluo at 505 nm Fluo at 483 nm 0 6009.5287 7779.00879 10 5843.4019 7579.47199 20 5767.2625 7516.12249 30 5744.72

我有一个普遍的问题,我想在某一列中找到一个值(例如a),一旦找到它,我想读取同一行但在不同列中的值(例如B)。请注意,我通常有300个长名称的列(例如TIME=2020-02-26 13:13:29)

以下是我的一些数据的样子:

Time (min)  Fluo at 505 nm  Fluo at 483 nm
0   6009.5287   7779.00879
10  5843.4019   7579.47199
20  5767.2625   7516.12249
30  5744.7249   7508.69999
40  5757.8681   7505.58810
50  5725.5031   7477.69310
60  5735.7887   7457.96376
70  5738.6775   7459.54250
80  5728.7831   7435.29809
90  5689.1200   7436.50999
我想在“505 nm处的Fluo”和“483 nm处的Fluo”中找到最大值,然后找到最大值所在的时间点

到目前为止,我已经做到了这一点(我也尝试了
.max()
.idxmax()
,但它显然给出了相同的结果)

问题是,通过这种方式,我得到了索引,其中最大值是,但不是时间点

这是输出:

[224 228 235 224 232 236 230 230 232 223 231 233 221 220 225 229 232 232 ... 193 196 196 204 190
 196 194]

这个问题看起来很简单,但我已经坚持了一个多星期了。希望找到一个简单的解决方案。

使用
idxmax
获取每列中最大值的索引,并使用时间列作为序列名称,使用剩余列作为其索引,从结果创建一个新序列

在下面的示例中,我修改了示例数据,使第二列的最大值(
Fluo,483 nm
)位于最后一行(
Time(min)
value of
90
)。例如,将最大值放在第一行有点令人困惑,因为索引0和时间0都是相同的。将“最大值”设置为不同的值会使示例更真实

df.iat[-1, -1] = 10000
>>> pd.Series(
        df[df.columns[0]].loc[df.iloc[:, 1:].idxmax()].tolist(), 
        index=df.columns[1:],
        name=df.columns[0]
    )
Fluo at 505 nm     0
Fluo at 483 nm    90
Name: Time (min), dtype: int64

使用
idxmax
获取每列中最大值的索引,并使用时间列作为序列名称,剩余列作为其索引,从结果创建新序列

在下面的示例中,我修改了示例数据,使第二列的最大值(
Fluo,483 nm
)位于最后一行(
Time(min)
value of
90
)。例如,将最大值放在第一行有点令人困惑,因为索引0和时间0都是相同的。将“最大值”设置为不同的值会使示例更真实

df.iat[-1, -1] = 10000
>>> pd.Series(
        df[df.columns[0]].loc[df.iloc[:, 1:].idxmax()].tolist(), 
        index=df.columns[1:],
        name=df.columns[0]
    )
Fluo at 505 nm     0
Fluo at 483 nm    90
Name: Time (min), dtype: int64
您可以使用
.idxmax()
,然后使用带有
.loc[]
的索引来获取所需的值。例如:

data = [{'time': 0, 'fluo1': 6009.5287, 'fluo2': 7779.008790000001},
 {'time': 10, 'fluo1': 5843.4019, 'fluo2': 7579.471990000001},
 {'time': 20, 'fluo1': 5767.2625, 'fluo2': 7516.122490000001},
 {'time': 30, 'fluo1': 5744.7249, 'fluo2': 7508.699990000001},
 {'time': 40, 'fluo1': 5757.8681, 'fluo2': 7505.5881},
 {'time': 50, 'fluo1': 5725.5031, 'fluo2': 7477.6931},
 {'time': 60, 'fluo1': 5735.7887, 'fluo2': 7457.96376},
 {'time': 70, 'fluo1': 5738.6775, 'fluo2': 7459.5425},
 {'time': 80, 'fluo1': 5728.7831, 'fluo2': 7435.29809},
 {'time': 90, 'fluo1': 5689.12, 'fluo2': 7436.5099900000005}]
df = pd.DataFrame(data)
df.loc[df['fluo2'].idxmax(), 'time']
您可以使用
.idxmax()
,然后使用带有
.loc[]
的索引来获取所需的值。例如:

data = [{'time': 0, 'fluo1': 6009.5287, 'fluo2': 7779.008790000001},
 {'time': 10, 'fluo1': 5843.4019, 'fluo2': 7579.471990000001},
 {'time': 20, 'fluo1': 5767.2625, 'fluo2': 7516.122490000001},
 {'time': 30, 'fluo1': 5744.7249, 'fluo2': 7508.699990000001},
 {'time': 40, 'fluo1': 5757.8681, 'fluo2': 7505.5881},
 {'time': 50, 'fluo1': 5725.5031, 'fluo2': 7477.6931},
 {'time': 60, 'fluo1': 5735.7887, 'fluo2': 7457.96376},
 {'time': 70, 'fluo1': 5738.6775, 'fluo2': 7459.5425},
 {'time': 80, 'fluo1': 5728.7831, 'fluo2': 7435.29809},
 {'time': 90, 'fluo1': 5689.12, 'fluo2': 7436.5099900000005}]
df = pd.DataFrame(data)
df.loc[df['fluo2'].idxmax(), 'time']

您可以使用以下方法在一行中获取两个值,如下所示:

df['Time (min)'].loc[[df['Fluo at 505 nm'].idxmax(),df['Fluo at 483 nm'].idxmax()]]

您可以使用以下方法在一行中获取两个值,如下所示:

df['Time (min)'].loc[[df['Fluo at 505 nm'].idxmax(),df['Fluo at 483 nm'].idxmax()]]

我尝试过使用它,但我得到了以下错误:`File“pandas/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\?您可以只使用第一列(时间),如下所示:
df[df.columns[0]].loc[df.iloc[:,1://idxmax()].tolist()
我尝试过使用它,但我得到了以下错误:`File“pandas/\u libs/index\u class\u helper.pxi”,第91行,在pandas.\u libs.index.Int64Engine.\u check\u type KeyError:'time(min)“`。您的列名可能稍有不同,或者有前导/尾随空格?您可以只使用第一列(时间),如下所示:
df[df.columns[0]].loc[df.iloc[:,1://idxmax()].tolist()
同样,在这段代码中,我也会得到相同的错误:`File“pandas/\u libs/index\u class\u helper.pxi”,第91行,在pandas.\u libs.index.Int64Engine.\u check\u type KeyError:'time(min)`。这段代码的另一个问题是,我必须键入所有的列,在我的大多数数据中,我有300个列,名称很长,因此在这种情况下,这将花费太多的时间。同样,在这段代码中,我会得到相同的错误:`File“pandas/_libs/index\u class\u helper.pxi”,第91行,在pandas.\u libs.index.Int64Engine.\u check\u type keyrorm:'Time(min)'` . 这段代码的另一个问题是,我必须键入所有列,在我的大多数数据中,我有300列,名称很长,因此在这种情况下,这将花费太多的时间。如果我复制并粘贴你的代码,它可以工作,但如果我尝试将其应用于我的数据(我已使用.loadtxt导入并转换为.DataFrame)它给出了相同的错误:File“pandas/_libs/index_class_helper.pxi”,第91行,在pandas._libs.index.Int64Engine._check_键入KeyError:'Fluo1'。如果您使用
pandas
读取文件,可能会更好
pd.read\u table('TestData.txt')
pd.read\u csv('TestData.txt',sep='\t')
应该可以工作。如果我复制并粘贴你的代码,它可以工作,但是如果我尝试将它应用到我的数据(我已使用.loadtxt导入并在.DataFrame中转换)中,它会给出相同的错误:File“pandas/\u libs/index\u class\u helper.pxi”,第91行,在pandas.\u libs.index.Int64Engine.\u check\u键入KeyError:'Fluo1'\u中。使用
pandas
读取文件可能更好
pd.read\u table('TestData.txt')
pd.read\u csv('TestData.txt',sep='\t')
应该可以工作。