I'm trying to find, at each timestamp, the column name in a dataframe for which the value matches with the one in a timeseries at the same timestamp.
Here is my dataframe:
>>> df col5 col4 col3 col2 col1 1979-01-01 00:00:00 1181.220328 912.154923 648.848635 390.986156 138.185861 1979-01-01 06:00:00 1190.724461 920.767974 657.099560 399.395338 147.761352 1979-01-01 12:00:00 1193.414510 918.121482 648.558837 384.632475 126.254342 1979-01-01 18:00:00 1171.670276 897.585930 629.201469 366.652033 109.545607 1979-01-02 00:00:00 1168.892579 900.375126 638.377583 382.584568 132.998706 >>> df.to_dict() {'col4': {<Timestamp: 1979-01-01 06:00:00>: 920.76797370744271, <Timestamp: 1979-01-01 00:00:00>: 912.15492332839756, <Timestamp: 1979-01-01 18:00:00>: 897.58592995700656, <Timestamp: 1979-01-01 12:00:00>: 918.1214819496729}, 'col5': {<Timestamp: 1979-01-01 06:00:00>: 1190.7244605667831, <Timestamp: 1979-01-01 00:00:00>: 1181.2203275146587, <Timestamp: 1979-01-01 18:00:00>: 1171.6702763228691, <Timestamp: 1979-01-01 12:00:00>: 1193.4145103184442}, 'col2': {<Timestamp: 1979-01-01 06:00:00>: 399.39533771666561, <Timestamp: 1979-01-01 00:00:00>: 390.98615646597591, <Timestamp: 1979-01-01 18:00:00>: 366.65203285812231, <Timestamp: 1979-01-01 12:00:00>: 384.63247469269874}, 'col3': {<Timestamp: 1979-01-01 06:00:00>: 657.09956023625466, <Timestamp: 1979-01-01 00:00:00>: 648.84863460462293, <Timestamp: 1979-01-01 18:00:00>: 629.20146872682449, <Timestamp: 1979-01-01 12:00:00>: 648.55883747413225}, 'col1': {<Timestamp: 1979-01-01 06:00:00>: 147.7613518219286, <Timestamp: 1979-01-01 00:00:00>: 138.18586102094068, <Timestamp: 1979-01-01 18:00:00>: 109.54560722575859, <Timestamp: 1979-01-01 12:00:00>: 126.25434189361377}}
And the time series with values I want to match at each timestamp:
>>> ts 1979-01-01 00:00:00 1181.220328 1979-01-01 06:00:00 657.099560 1979-01-01 12:00:00 126.254342 1979-01-01 18:00:00 109.545607 Freq: 6H >>> ts.to_dict() {<Timestamp: 1979-01-01 06:00:00>: 657.09956023625466, <Timestamp: 1979-01-01 00:00:00>: 1181.2203275146587, <Timestamp: 1979-01-01 18:00:00>: 109.54560722575859, <Timestamp: 1979-01-01 12:00:00>: 126.25434189361377}
Then the result would be:
>>> df_result value Column 1979-01-01 00:00:00 1181.220328 col5 1979-01-01 06:00:00 657.099560 col3 1979-01-01 12:00:00 126.254342 col1 1979-01-01 18:00:00 109.545607 col1
I hope my question is clear enough. Anyone has an idea how to get df_result?
Thanks
Greg
You can get the column names from pandas DataFrame using df. columns. values , and pass this to python list() function to get it as list, once you have the data you can print it using print() statement.
To access the names of a Pandas dataframe, we can the method columns(). For example, if our dataframe is called df we just type print(df. columns) to get all the columns of the Pandas dataframe.
Just wanted to add that for a situation where multiple columns may have the value and you want all the column names in a list, you can do the following (e.g. get all column names with a value = 'x'):
df.apply(lambda row: row[row == 'x'].index, axis=1)
The idea is that you turn each row into a series (by adding axis=1
) where the column names are now turned into the index of the series. You then filter your series with a condition (e.g. row == 'x'
), then take the index values (aka column names!).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With