【问题标题】:Generate a column data based on constraints根据约束生成列数据
【发布时间】:2019-10-30 06:11:27
【问题描述】:

我有一个包含 2 列 date_1 和 date_2 的 csv。

Date_1  Date_2
01/09/2019  02/08/2019
01/09/2019  03/08/2019
02/09/2019  03/08/2019
01/09/2019  04/08/2019
02/09/2019  04/08/2019
03/09/2019  04/08/2019
02/09/2019  05/08/2019
03/09/2019  05/08/2019
04/09/2019  05/08/2019
01/09/2019  06/08/2019
02/09/2019  06/08/2019
03/09/2019  06/08/2019
04/09/2019  06/08/2019
05/09/2019  06/08/2019
02/09/2019  07/08/2019
03/09/2019  07/08/2019
04/09/2019  07/08/2019
05/09/2019  07/08/2019
06/09/2019  07/08/2019
02/09/2019  08/08/2019
03/09/2019  08/08/2019

我想生成一个新列value_1 这样:

  1. 对于每个 date_1value_1(聚合)不应超过 5000。

  2. date_2value_1 应该有增加的趋势,即在 date_2 上聚合,value_1 应该每天都在增加,例如,如果对于 date_2,聚合的 value_1 是 1000,那么对于下一个date_2的值应该大于1000。

数据框有唯一的(date_1,date_2) 元组。

编辑:

数据链接

https://drive.google.com/file/d/1xOlJfPNhGgclWyyQmdwzG-WRkU2fhEI4/view?usp=sharing

任何人都可以提供相同的帮助。

【问题讨论】:

  • 我不明白这个问题。具体来说value_1是什么@
  • 你的解释句很长。如果分成几个不同的句子,也许会更容易理解?
  • @CodeBling value_1 将使用上述约束生成。
  • 正如我所提到的,您的解释不清楚。您提到了对value_1aggregated 值的几个限制,但没有首先提及如何获得value_1。不了解这一点,没有人可以帮助你。 (而且你将继续积累反对票,因为没有人能理解这个问题)

标签: python pandas numpy


【解决方案1】:

我认为这不是你真正想要的,但我写它只是为了让你明白这完全回答了你的问题中的要求,如果你的意思是别的,你必须添加示例你的期望:

df['value_1'] = np.arange(0, 5000 / max(df['date_1'].value_counts()), 5000 / len(df) / max(df['date_1'].value_counts()))

这将使您在value_1 列中呈上升趋势,并且每个date_1value_1 总和保证不会超过5000。 顺便说一句:要呈现增长趋势,这假设您的日期已排序,如您发布的示例数据所示。如果不是(或可能不会),请执行以下操作:

df = df.sort_values(['date_1', 'date_2']) # or ['date_2', 'date_1'] if you prefer

value_1 列创建之前

【讨论】:

  • 感谢您的回答,不过排序是根据date_2进行的。该列具有唯一的元组条目(date_1,date_2)。那么相同的代码会起作用吗?
  • 感谢您的回答和理解,还有几个问题。我尝试将最大限制从 5000 更改为 25000 并使用以下代码:df10['value_2'] = np.arange(50, 25000 / max(df10['Date_1'].value_counts()), 25000 / len(df10) / max(df10['Date_1'].value_counts())) 我收到一条错误消息,提示 ValueError: Length of values does not match length of index 这里有问题吗?我也想得到 abs 值而不是十进制值。
  • 如果您从 50 而不是 0 开始 np.arange,那么对于范围内的相同步骤,它应该达到 25050 / max(df10['Date_1'].value_counts())(不要更改它们)。您还可以将.astype(int) 添加到行尾以将其作为整数而不是浮点数。是的,无论哪个date 列首先排序,它的工作原理都是一样的。
  • 我更改了代码df10['value_2'] = np.arange(50, 25050 / max(df10['Date_1'].value_counts()), 25050 / len(df10) / max(df10['Date_1'].value_counts())).astype(int),但它仍然给我同样的错误。
  • 正如我所写,不要改变步长(arange 函数中的第三个参数),只改变目标值(第二个参数)。
猜你喜欢
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多