Pandas: find the minimum value in a column, write the row containing that column into a new dataframe

I have a large number of simple time series in unique CSV files. Each file contains a Date column and a Close column.

I would like to use pandas to read data for each file in a dataframe, find the minimum value in the Close column, and write both the minimum Close value and the associated Date to the new dataframe.

Ideally, this will create a new framework that contains the minimum close values ​​and the date that minimum level occurred for all files that are escaped.

import pandas as pd
import os

symbol = "LN"
start_year = 2010
end_year = 2014
months = ["G", "J", "M", "N", "Q", "V", "Z"]

def historiclows():
    df1 = pd.read_csv("%s.csv" % (file3))
    df1 = df1.drop(df1.columns[[1,2,3,5,6]], axis = 1)
    targetvalues = df1.loc[df1["Close"].idxmin()]
    df2.append(targetvalues)

for m in months:
df2 = pd.DataFrame()    

for y in range(start_year, end_year+1):
    if m != "Z":
        if months[months.index(m)+1] != "Z":
            file1 = ("%s%s%s%s%s%s" % (symbol, m, y, symbol, months[months.index(m)+1], y))
            file2 = ("%s%s%s%s%s%s" % (symbol, months[months.index(m)+1], y, symbol, months[months.index(m)+2], y))
            file3 = ("%s%s" % (file1, file2))
            checkfile3 = os.path.isfile("%s.csv" % file3)
            if checkfile3 == True:
                title = ("%s%s%s" % (m, months[months.index(m)+1], months[months.index(m)+2]))
                historiclows()
                print(df2)

            else:
                pass

        else:
            file1 = ("%s%s%s%s%s%s" % (symbol, m, y, symbol, months[months.index(m)+1], y))
            file2 = ("%s%s%s%s%s%s" % (symbol, months[months.index(m)+1], y, symbol, str(months[0]), y+1))
            file3 = ("%s%s" % (file1, file2))
            checkfile3 = os.path.isfile("%s.csv" % file3)
            if checkfile3 == True:
                title = ("%s%s%s" % (m, months[months.index(m)+1], str(months[0])))
                historiclows()
                print(df2)

            else:
                pass

    else:
        file1 = ("%s%s%s%s%s%s" % (symbol, m, y, symbol, str(months[0]), y+1))
        file2 = ("%s%s%s%s%s%s" % (symbol, str(months[0]), y+1, symbol, str(months[1]), y+1))
        file3 = ("%s%s" % (file1, file2))
        checkfile3 = os.path.isfile("%s.csv" % file3)
        if checkfile3 == True:
            title = ("%s%s%s" % (m, str(months[0]), str(months[1])))
            historiclows()
            print(df2)

        else:
            pass

      

print ("!!! PROCESS COMPLETE !!!")

+3


source to share


1 answer


You can simply do:

>> orig_df
            Close
2015-01-01      4
2015-02-01      1
2015-03-01      3
2015-03-01      1

new_df = orig_df[orig_df['Close'] == min(orig_df['Close'])]

>> new_df
            Close
2015-02-01      1
2015-03-01      1

      

Then, if you want the minimum to appear once in the new dataframe, you can use drop_duplicates

:



new_df.drop_duplicates(subset=['Close'], inplace=True)

>>          Close
2015-02-01      1

      

If you want to get the last date and not the first date, do

new_df.drop_duplicates(subset=['Close'], inplace=True, take_last=True)

      

+3


source







All Articles