【发布时间】:2019-02-23 09:19:19
【问题描述】:
我想不出我要解决的问题。 我有一个来自这个的熊猫数据框:
date, id, measure, result
2016-07-11, 31, "[2, 5, 3, 3]", 1
2016-07-12, 32, "[3, 5, 3, 3]", 1
2016-07-13, 33, "[2, 1, 2, 2]", 1
2016-07-14, 34, "[2, 6, 3, 3]", 1
2016-07-15, 35, "[39, 31, 73, 34]", 0
2016-07-16, 36, "[3, 2, 3, 3]", 1
2016-07-17, 37, "[3, 8, 3, 3]", 1
Measurements 列由字符串格式的数组组成。
我想从过去 3 个 测量记录中获得一个新 moving-average-array 列,不包括那些result 为 0 的记录。过去 3 个记录意味着对于id 34,要使用id 31,32,33 的数组。
这是关于取每个第 1 点、第 2 点、第 3 和第 4 点的平均值来得到这个moving-average-array。
不是要获取第一个数组、第二个数组的平均值……然后取平均值,no。
对于前3行,因为没有足够的历史,我只想用自己的测量。所以解决方案应该是这样的:
date, id, measure, result . Solution
2016-07-11, 31, "[2, 5, 3, 3]", 1, "[2, 5, 3, 3]"
2016-07-12, 32, "[3, 5, 3, 3]", 1, "[3, 5, 3, 3]"
2016-07-13, 33, "[2, 1, 2, 2]", 1, "[2, 1, 2, 2]"
2016-07-14, 34, "[2, 6, 3, 3]", 1, "[2.3, 3.6, 2.6, 2.6]"
2016-07-15, 35, "[39, 31, 73, 34]", 0, "[2.3, 4, 2.6, 2.6]"
2016-07-16, 36, "[3, 2, 3, 3]", 1, "[2.3, 4, 2.6, 2.6]"
2016-07-17, 37, "[3, 8, 3, 3]", 1, "[2.3, 3, 2.6, 2.6]"
真实数据更大。 result 0 也可以在彼此之后重复 2 次或更多次。我认为这将是关于跟踪以前的 OK results 正确获得这些平均值。我花了时间,但我做不到。
我在这里发布数据框:
mydict = {'date': {0: '2016-07-11',
1: '2016-07-12',
2: '2016-07-13',
3: '2016-07-14',
4: '2016-07-15',
5: '2016-07-16',
6: '2016-07-17'},
'id': {0: 31, 1: 32, 2: 33, 3: 34, 4: 35, 5: 36, 6: 37},
'measure': {0: '[2, 5, 3, 3]',
1: '[3, 5, 3, 3]',
2: '[2, 1, 2, 2]',
3: '[2, 6, 3, 3]',
4: '[39, 31, 73, 34]',
5: '[3, 2, 3, 3]',
6: '[3, 8, 3, 3]'},
'result': {0: 1, 1: 1, 2: 1, 3: 1, 4: 0, 5: 1, 6: 1}}
df = pd.DataFrame(mydict)
感谢您提供指示或指出如何操作。
【问题讨论】:
-
你的度量是str还是int列表,双引号表示str?并且您可以删除结果为 0 的行?
-
它是一个字符串,您可以解析并生成一个数字列表。最初,它们是像 3.34、2.45 这样的浮点数。为了简单起见,我在那里输入了整数。我们不允许删除结果为 0 的行,我们需要它们。