我是Python和Pandas的新手,我已經拉入了一個包含15個以上不同日期時間列的數據庫表。我的任務是通常按行中的最新值排序這些列。但是,數據並不乾淨。有時候,A列的日期會在第0行的B列日期之前出現,A會在第1行的B之後出現。如何在Pandas數據框中按行值對日期時間列進行排序?
我編寫了幾個函數(爲簡單起見,此處編輯)通過計算時間百分比在一個日期來之前和B之後,然後根據這個百分比排序的列:
def get_percentage(df, df_subset):
return len(df_subset)/float(len(df))
def duration_report(df, earlier_column, later_column):
results = {}
td = df[later_column] - df[earlier_column]
results["Before"] = get_percentage(df, df.loc[td >= pd.Timedelta(0)])
results["After"] = get_percentage(df, df.loc[td <= pd.Timedelta(0)])
ind = "%s vs %s" % (earlier_column, later_column)
return pd.DataFrame(data=results, index=[ind])
def order_date_columns(df, col1, col2):
before = duration_report(df, col1, col2).Before.values[0]
after = duration_report(df, col1, col2).After.values[0]
if before >= after:
return [col1, col2]
else:
return [col2, col1]
我與上面的代碼的目標是通過編程實現以下:
如果柱A日期到來在Col B日期爲50 +%的時間之前,Col A應該在t之前的Col B之前他列出了最早的日期時間列。
的order_date_columns()
函數成功排序兩列到正確的順序,但我怎麼一次將這個排序到15+列?我查看了df.apply()
,lambda
和map()
,但未能解決此問題。
任何幫助(與代碼的清晰度/效率),將不勝感激!
爲了記錄,我使用了Anaconda的Python 2.7.12。 – alemosie