- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想我发现了 pandas 中的一个错误。我希望得到一些帮助来验证错误或帮助我找出我的代码中逻辑错误的位置。
我的代码如下:
import pandas, numpy, StringIO
def sq_fixer(sr):
sr = sr.where(sr != '20200229')
ranks = sr.argsort().astype(float)
ranks[ranks == -1] = numpy.nan
return ','.join(ranks.astype(numpy.str))
def correct_date(sr):
date_fixer = lambda x: pandas.datetime(x.year -100, x.month, x.day) if x > pandas.datetime.now() else x
sr = pandas.to_datetime(sr).apply(date_fixer).astype(pandas.datetime)
return sr
txt = '''ID,RUN_START_DATE,PUSHUP_START_DATE,SITUP_START_DATE,PULLUP_START_DATE
1,2013-01-24,2013-01-02,,2013-02-03
2,2013-01-30,2013-01-21,2013-01-13,2013-01-06
3,2013-01-29,2013-01-28,2013-01-01,2013-01-29
4,2013-02-16,2013-02-12,2013-01-04,2013-02-11
5,2013-01-06,2013-02-07,2013-02-25,2013-02-12
6,2013-01-26,2013-01-28,2013-02-12,2013-01-10
7,2013-01-26,,2013-01-12,2013-01-30
8,2013-01-03,2013-01-24,2013-01-19,2013-01-02
9,2013-01-22,2013-01-13,2013-02-03,
10,2013-02-06,2013-01-16,2013-02-07,2013-01-11
3347,,2008-02-27,2008-04-10,2008-02-13
3588,2004-09-12,,2004-11-06,2004-09-06
3784,2003-02-22,,2003-06-21,2003-02-19
593,2009-04-03,,2009-06-01,2009-04-01
4148,2003-03-21,2002-09-20,2003-04-01,2003-01-01
4299,2004-05-24,2004-07-23,,2004-04-22
4590,2005-05-05,2005-12-05,2005-04-05,
4830,2001-06-12,2000-10-12,2001-07-28,2001-01-28
4941,2006-11-08,2006-12-19,2006-07-19,2007-02-24
1416,2004-04-03,2004-05-19,2004-02-06,
1580,2008-12-20,,2009-03-19,2008-12-19
1661,2005-10-03,2005-10-26,2005-09-12,2006-02-19
1759,2001-10-18,,2002-01-17,2001-10-17
1858,2003-04-14,2003-05-17,,2002-12-17
1972,2003-06-01,2003-07-14,2002-12-14,
5905,2000-11-18,2001-01-13,,2000-11-04
2052,2002-06-11,,2002-08-23,2001-12-12
2165,2006-10-01,,2007-02-27,2006-09-30
2218,2007-09-19,,2008-02-06,2007-09-09
2350,2000-08-08,,2000-09-22,2000-01-08
2432,2001-08-22,,2001-09-25,2000-12-16
2611,2005-05-07,,2005-06-05,2005-03-26
2612,2005-05-06,,2005-05-26,2005-04-11
7378,2009-08-07,2009-01-30,2010-01-20,2009-06-08
7550,2006-04-08,,2006-06-01,2006-04-01 '''
df = pandas.read_csv(StringIO.StringIO(txt))
sequence_array = ['RUN_START_DATE', 'PUSHUP_START_DATE', 'SITUP_START_DATE', 'PULLUP_START_DATE']
xsequence_array = ['X_RUN_START_DATE', 'X_PUSHUP_START_DATE', 'X_SITUP_START_DATE', 'X_PULLUP_START_DATE']
df[sequence_array] = df[sequence_array].apply(correct_date, axis=1)
fix_day = lambda x: x if x > 0 else 29
fix_month = lambda x: x if x > 0 else 02
fix_year = lambda x: x if x > 0 else 2020
for col in sequence_array:
xcol = 'X_{0}'.format(col)
df[xcol] = ['{0:04d}{1:02d}{2:02d}'.format(fix_year(c.year), fix_month(c.month), fix_day(c.day)) for c in df[col]]
df['X_AS_SEQUENCE'] = df[xsequence_array].apply(sq_fixer, axis=1)
当我运行代码时,大部分结果都是正确的。以索引 6 为例:
In [31]: df.ix[6]
Out[31]:
ID 7
RUN_START_DATE 2013-01-26 00:00:00
PUSHUP_START_DATE NaN
SITUP_START_DATE 2013-01-12 00:00:00
PULLUP_START_DATE 2013-01-30 00:00:00
X_RUN_START_DATE 20130126
X_PUSHUP_START_DATE 20200229
X_SITUP_START_DATE 20130112
X_PULLUP_START_DATE 20130130
X_AS_SEQUENCE 1.0,nan,0.0,2.0
但是,某些索引似乎会引发 pandas.argsort() 循环。以索引 10 为例:
In [32]: df.ix[10]
Out[32]:
ID 3347
RUN_START_DATE NaN
PUSHUP_START_DATE 2008-02-27 00:00:00
SITUP_START_DATE 2008-04-10 00:00:00
PULLUP_START_DATE 2008-02-13 00:00:00
X_RUN_START_DATE 20200229
X_PUSHUP_START_DATE 20080227
X_SITUP_START_DATE 20080410
X_PULLUP_START_DATE 20080213
X_AS_SEQUENCE nan,2.0,0.0,1.0
argsort 应该返回 nan,1.0,2.0,0.0
而不是 nan,2.0,0.0,1.0
。
我已经研究了三天了。在这一点上,我不确定是我还是错误。我不确定如何回溯它以获得答案。任何帮助将不胜感激!
最佳答案
您可能错误地解释了 argsort
的结果。 argsort
不给出值的排名。使用 rank方法,如果你想对值进行排名。
argsort
返回的 Series 中的值给出了丢弃 NaN 后原始值的相应位置。在您的例子中,由于您将 20200229 转换为 NaN,因此您正在对 NaN, 20080227, 20080410, 20080213
进行 argsorting。非 NaN 值是
nonnan = [20080227, 20080410, 20080213]
结果 NaN, 2, 0, 1
说:
argsort sorted values
NaN NaN
2 nonnan[2] = 20080213
0 nonnan[0] = 20080227
1 nonnan[1] = 20080410
所以我觉得还可以。
关于python - pandas argsort 的有趣结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630302/
因此,它是一种间接排序,它返回对数组进行排序的索引。为什么它是“argsort”(考虑到它需要一个参数——要使用的排序类型,这是有道理的)而不是“indirect_sort”或类似的东西?还是 get
我有以下数据帧: 用户身份 列_1 列_2 第 3 列 一种 4.959 3.231 1.2356 乙 0.632 0.963 2.4556 C 3.234 7.445 5.3435 D 1.454
我正在纯Python中寻找一个理想的函数,它类似于numpy.argsort,因为它只返回排序索引的列表,同时保持原始数组不变,但它需要能够对多个数组中包含的数据进行排序数组。 示例: >>> nam
所以我有一个二维数组,其中第一列由介于 -1.0 和 1.0 之间的 float 组成。我想根据第一列对数组进行排序,从最低到最高,这样: data[0,data[0,:].argsort()] 但问
考虑以下代码: avgDists = np.array([1, 8, 6, 9, 4]) ids = avgDists.argsort()[:n] 这给了我 n 最小元素的索引。是否可以按降序使用相同
我在使用函数 argsort 对 2D 数组进行排序时遇到以下问题。 更准确地说,假设我有 5 个点,并计算了它们之间的欧氏距离,这些距离存储在二维数组 D 中: D=np.array([[0,0.3
我想我发现了 pandas 中的一个错误。我希望得到一些帮助来验证错误或帮助我找出我的代码中逻辑错误的位置。 我的代码如下: import pandas, numpy, StringIO def sq
所以我有一个数组,例如 [-0.7, -3.7, -2.1, -5.8, -1.2 ]这些特定数字对应于按顺序排列的标签:比如 0.7 对应于标签 201,3.7 对应于标签 202 等等。 正常排序
我正在尝试使用 argsort 函数对 numpy 数组进行排序。 不幸的是,这不起作用,我不明白为什么 :( 代码是: import numpy as np distance = np.array(
最近,我一直在试验 np.argsort,我发现了一些奇怪的东西。 如果你运行下面的代码,你会得到结果: In [0]: np.argsort([3]*16) Out[0]: array([ 0,
np.argsort() 如何处理关系? test = [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0
这个问题在这里已经有了答案: how to make argsort result to be random between equal values? (2 个答案) 关闭 7 年前。 我有一个
我有一个 numpy 数组: foo = array([3, 1, 4, 0, 1, 0]) 我想要前 3 项。呼唤 foo.argsort()[::-1][:3] 返回 array([2, 0, 4
我有一些代码可以根据二维圆形窗口中的相邻值计算图像中的缺失值。它还使用来自同一位置的一个或多个时间相邻图像的值(即在 3 维中移动的相同 2D 窗口)。 对于每个缺失的位置,我需要计算的值不一定基于整
我有一个数组 [0.2,0,0,0,0.3,0,0,0,0.4]。我正在使用 np.argsort 对值进行排序并获取该索引。 因此,对于我的示例,它将类似于 [1,5,9,2,3,4,6...]。但
假设您有一个 numpy 向量 [0,3,1,1,1] 并且您运行 argsort你会得到 [0,2,3,4,1] 但所有的都是一样的!我想要的是一种洗牌相同值索引的有效方法。知道如何在没有 whil
如果我们有一个一维数组 arr = np.random.randint(7, size=(5)) # [3 1 4 6 2] print np.argsort(arr) # [1 4 0 2 3]
为什么 numpy 会给出这个结果: x = numpy.array([1.48,1.41,0.0,0.1]) print x.argsort() >[2 3 1 0] 当我期望它这样做时: [3 2
给定一个数组 'a' 我想按列对数组进行排序 sort(a, axis=0) 对数组做一些事情,然后撤消排序。我的意思不是重新排序,而是基本上颠倒每个元素的移动方式。我假设 argsort() 是我需
numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是一维数组,相当于[xv if
我是一名优秀的程序员,十分优秀!