根据每个数据帧中的值对数据帧列表中数据帧的顺序进行排序
sort the order of dataframes in a list of dataframes based on a value in each dataframe
我有一个数据框列表,我想对它们在列表中的顺序进行排序
每个数据框的结构如下所示
df1 = pd.DataFrame.from_dict({'Ch1': {0: -28, 1: -36, 2: -39, 3: -16}, 'Ch2': {0: 543, 1: 547, 2: 559, 3: 561}, 'Ch3': {0: -126, 1: -131, 2: -147, 3: -149}, 'time': {0: '2022-02-10 16.37.25.502', 1: '2022-02-10 16.37.25.502', 2: '2022-02-10 16.37.25.502', 3: '2022-02-10 16.37.25.502'}})
df2 = pd.DataFrame.from_dict({'Ch1': {0: 81, 1: 70, 2: 70, 3: 75}, 'Ch2': {0: 570, 1: 559, 2: 554, 3: 565}, 'Ch3': {0: -103, 1: -120, 2: -131, 3: -122}, 'time': {0: '2022-02-11 05.29.28.116', 1: '2022-02-11 05.29.28.116', 2: '2022-02-11 05.29.28.116', 3: '2022-02-11 05.29.28.116'}})
df3 = pd.DataFrame.from_dict({'Ch1': {0: -887, 1: -887, 2: -890, 3: -898}, 'Ch2': {0: 1307, 1: 1292, 2: 1301, 3: 1307}, 'Ch3': {0: 59, 1: 61, 2: 57, 3: 55}, 'time': {0: '2022-02-08 01.12.54.578', 1: '2022-02-08 01.12.54.578', 2: '2022-02-08 01.12.54.578', 3: '2022-02-08 01.12.54.578'}})
df_list = [df1,df2,df3]
“时间”列中的值在同一数据帧的每一行中都不会改变。
我希望列表中的数据帧按时间排序(从前到后),以便进一步处理并与其他数据匹配。
到目前为止我的尝试。
for i in df_list:
b = pd.to_datetime(i['time'].iloc[0]) #grab the first cell that contains the time stamp
b = b.sort_values(by('time'))
returns出现如下错误
ValueError: ('Unknown string format:', '2022-02-05 08.03.09.794')
我希望数据帧出现在列表中,其中 df3 是第一个,df1、第二个和 df2 最后一个。我的时间列正在运行,需要删除以进行其他操作,因此我希望它们已经按时间顺序排序
非常感谢任何帮助建议的替代方法
如果你想对每个数据框的行进行排序,你需要提供你的日期时间的准确格式,你应该就地排序:
for d in df_list:
d['time'] = pd.to_datetime(d['time'], format='%Y-%m-%d %H.%M.%S.%f')
d.sort_values(by='time', inplace=True)
或者,如果要对完全不同的列表中的数据帧进行排序,请使用:
df_list.sort(key=lambda d: d['time'].iloc[0])
根据您的特定格式(假设 YYYY-MM-DD),您应该能够使用字符串进行排序。
确保按日期时间排序(例如,如果格式为 MM-DD-YYYY):
df_list.sort(key=lambda d: pd.to_datetime(d['time'].iloc[0], format='%Y-%m-%d %H.%M.%S.%f'))
我有一个数据框列表,我想对它们在列表中的顺序进行排序
每个数据框的结构如下所示
df1 = pd.DataFrame.from_dict({'Ch1': {0: -28, 1: -36, 2: -39, 3: -16}, 'Ch2': {0: 543, 1: 547, 2: 559, 3: 561}, 'Ch3': {0: -126, 1: -131, 2: -147, 3: -149}, 'time': {0: '2022-02-10 16.37.25.502', 1: '2022-02-10 16.37.25.502', 2: '2022-02-10 16.37.25.502', 3: '2022-02-10 16.37.25.502'}})
df2 = pd.DataFrame.from_dict({'Ch1': {0: 81, 1: 70, 2: 70, 3: 75}, 'Ch2': {0: 570, 1: 559, 2: 554, 3: 565}, 'Ch3': {0: -103, 1: -120, 2: -131, 3: -122}, 'time': {0: '2022-02-11 05.29.28.116', 1: '2022-02-11 05.29.28.116', 2: '2022-02-11 05.29.28.116', 3: '2022-02-11 05.29.28.116'}})
df3 = pd.DataFrame.from_dict({'Ch1': {0: -887, 1: -887, 2: -890, 3: -898}, 'Ch2': {0: 1307, 1: 1292, 2: 1301, 3: 1307}, 'Ch3': {0: 59, 1: 61, 2: 57, 3: 55}, 'time': {0: '2022-02-08 01.12.54.578', 1: '2022-02-08 01.12.54.578', 2: '2022-02-08 01.12.54.578', 3: '2022-02-08 01.12.54.578'}})
df_list = [df1,df2,df3]
“时间”列中的值在同一数据帧的每一行中都不会改变。
我希望列表中的数据帧按时间排序(从前到后),以便进一步处理并与其他数据匹配。
到目前为止我的尝试。
for i in df_list:
b = pd.to_datetime(i['time'].iloc[0]) #grab the first cell that contains the time stamp
b = b.sort_values(by('time'))
returns出现如下错误 ValueError: ('Unknown string format:', '2022-02-05 08.03.09.794')
我希望数据帧出现在列表中,其中 df3 是第一个,df1、第二个和 df2 最后一个。我的时间列正在运行,需要删除以进行其他操作,因此我希望它们已经按时间顺序排序
非常感谢任何帮助建议的替代方法
如果你想对每个数据框的行进行排序,你需要提供你的日期时间的准确格式,你应该就地排序:
for d in df_list:
d['time'] = pd.to_datetime(d['time'], format='%Y-%m-%d %H.%M.%S.%f')
d.sort_values(by='time', inplace=True)
或者,如果要对完全不同的列表中的数据帧进行排序,请使用:
df_list.sort(key=lambda d: d['time'].iloc[0])
根据您的特定格式(假设 YYYY-MM-DD),您应该能够使用字符串进行排序。
确保按日期时间排序(例如,如果格式为 MM-DD-YYYY):
df_list.sort(key=lambda d: pd.to_datetime(d['time'].iloc[0], format='%Y-%m-%d %H.%M.%S.%f'))