如何在Pandas数据框中按行值对日期时间列进行排序?

阿莱莫斯

我是Python和Pandas的新手,并且已经提取了一个包含15个以上不同datetime列的数据库表。我的任务是按照最早到最新的值对这些列进行排序。但是,数据并不干净。有时,在第0行中A列的日期早于B列的日期,而在第1行中A的日期晚于B的日期。

我编写了一些函数(为简化起见,在此处进行了编辑),它们通过计算A中日期在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]

我上面的代码的目标是以编程方式实现以下功能:

如果Col A的日期早于Col B的日期超过50%的时间,则Col A应该早于最新日期时间列的列表中的Col B之前。

order_date_columns()函数成功地按正确的顺序对两列进行了排序,但是如何将这种排序一次应用于15个以上的列?我研究了df.apply(),,lambdamap(),但未能解决此问题。

任何帮助(以及代码的清晰性/效率)也将不胜感激!

姆弗兰克利

由于您使用的是Python 2.7,因此可以使用cmp关键字参数sorted为了按您想要的顺序获取列名,我将执行以下操作:

# Returns -1 if first_column[i] > second_column[i] more often.
# Returns 1 if vice versa.
# Returns 0 if equal.
# Assumes df[first_column] and df[second_column] are the same length.
def compare_two(first_column, second_column):
    c1_greater_count = 0
    c2_greater_count = 0
    # Iterate over the two columns in the dataframe. df must be in accessible scope.
    for i in range(len(df[first_column])):
        if df[first_column].iloc(i) > df[second_column].iloc[i]:
            c1_greater_count += 1
        elif df[second_column].iloc[i] > df[first_column].iloc[i]:
            c2_greater_count += 1

    if c1_greater_count > c2_greater_count:
        return -1
    if c2_greater_count > c1_greater_count:
        return 1
    return 0

df = get_dataframe_from_somewhere()
relevant_column_names = get_relevant_column_names(df) # e.g., get all the dates.
sorted_column_names = sorted(relevant_column_names, cmp=compare_two)

# sorted_column_names holds the names of the relevant columns,
# sorted according to the given ordering.

我敢肯定,还有一种更Python化的方法可以做到这一点,但这应该行得通。请注意,对于Python 3,可以使用该cmp_to_key实用程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在熊猫时间序列中按日期对日期进行分组?

来自分类Dev

在R中按日历顺序对日期列进行排序

来自分类Dev

按日期对Pandas数据框列索引进行排序

来自分类Dev

如何在字符串数组php中对日期时间进行排序

来自分类Dev

如何按每个数据框中的列值对列表中的数据框进行排序?

来自分类Dev

在Python-Pandas中,如何按特定的日期时间索引值对数据框进行子集化?

来自分类Dev

如何在jQuery中对日期进行排序

来自分类Dev

您如何在字典中对日期进行排序?

来自分类Dev

如何在mysql中对日期进行排序

来自分类Dev

如何在MongoDB中按季度对日期进行分组

来自分类Dev

按列值对数据框中的行值进行排序

来自分类Dev

熊猫对列值进行排序而不对日期时间进行相应排序

来自分类Dev

按列值对数据框中的每一行进行排序

来自分类Dev

如何在JQuery中按日期对xml数据进行排序

来自分类Dev

在r中按日期和时间对数据框进行排序和排序

来自分类Dev

如何在Excel中按数据对列进行排序/排序

来自分类Dev

如何按行中的名称对数据框进行排序?

来自分类Dev

如何使用dplyr在数据框中按行对值进行排序?

来自分类Dev

如何按Python(pandas)列中的出现次数对数据框进行排序

来自分类Dev

如何在Julia中按多个列对数据框进行排序

来自分类Dev

如何在XSL中对日期排序?

来自分类Dev

Java对日期时间值的集合进行排序

来自分类Dev

对pandas数据框中的多个文本列的值进行排序

来自分类Dev

如何在Pandas中不是按行而是按列对值排序?

来自分类Dev

当列标题是日期时间值时,如何按列标题值对Pandas数据进行切片?

来自分类Dev

如何使用比较器按降序对日期进行排序

来自分类Dev

在熊猫数据框中以字符串格式对日期进行排序?

来自分类Dev

如何对熊猫数据框中的某些行的值进行排序?

来自分类Dev

在Javascript中按时间对日期列表进行排序

Related 相关文章

  1. 1

    如何在熊猫时间序列中按日期对日期进行分组?

  2. 2

    在R中按日历顺序对日期列进行排序

  3. 3

    按日期对Pandas数据框列索引进行排序

  4. 4

    如何在字符串数组php中对日期时间进行排序

  5. 5

    如何按每个数据框中的列值对列表中的数据框进行排序?

  6. 6

    在Python-Pandas中,如何按特定的日期时间索引值对数据框进行子集化?

  7. 7

    如何在jQuery中对日期进行排序

  8. 8

    您如何在字典中对日期进行排序?

  9. 9

    如何在mysql中对日期进行排序

  10. 10

    如何在MongoDB中按季度对日期进行分组

  11. 11

    按列值对数据框中的行值进行排序

  12. 12

    熊猫对列值进行排序而不对日期时间进行相应排序

  13. 13

    按列值对数据框中的每一行进行排序

  14. 14

    如何在JQuery中按日期对xml数据进行排序

  15. 15

    在r中按日期和时间对数据框进行排序和排序

  16. 16

    如何在Excel中按数据对列进行排序/排序

  17. 17

    如何按行中的名称对数据框进行排序?

  18. 18

    如何使用dplyr在数据框中按行对值进行排序?

  19. 19

    如何按Python(pandas)列中的出现次数对数据框进行排序

  20. 20

    如何在Julia中按多个列对数据框进行排序

  21. 21

    如何在XSL中对日期排序?

  22. 22

    Java对日期时间值的集合进行排序

  23. 23

    对pandas数据框中的多个文本列的值进行排序

  24. 24

    如何在Pandas中不是按行而是按列对值排序?

  25. 25

    当列标题是日期时间值时,如何按列标题值对Pandas数据进行切片?

  26. 26

    如何使用比较器按降序对日期进行排序

  27. 27

    在熊猫数据框中以字符串格式对日期进行排序?

  28. 28

    如何对熊猫数据框中的某些行的值进行排序?

  29. 29

    在Javascript中按时间对日期列表进行排序

热门标签

归档