python-3.x - 根据字段值重现/中断行

标签 python-3.x pandas pandas-groupby

我的 dataframe 为:

id        date     value
1         2016     3
2         2016     1
1         2018     1
1         2016     1.1

现在我想用一些奇怪的原因重现行,逻辑如下:

if value > 1
    reproduce row value times - 1
    with value = 1
    or fraction left for last unit

为了更好地理解,只考虑 dataframe 的第一行,即:

id        date     value
1         2016     3

我将其分为 3 行:

id        date     value
1         2016     1
1         2016     1
1         2016     1

但考虑最后一行,即:

id        date     value
1         2016     1.1

其中被破坏为:

id        date     value
1         2016     1
1         2016     0.1

即如果有任何分数,则将其单独分解,否则在一个单元中

然后按id分组并按日期排序显然很容易。

即新的 dataframe 看起来像:

id        date     value
1         2016     1
1         2016     1
1         2016     1
1         2016     1
1         2016     0.1
1         2018     1
2         2016     1

主要问题是复制行。

更新

一个示例dataframe代码:

df = pd.DataFrame([[1,2018,5.1],[2,2018,2],[1,2016,1]], columns=["id", "date", "value"])

最佳答案

发电机

def f(df):
  for i, *t, v in df.itertuples():
    while v > 0:
      yield t + [min(v, 1)]
      v -= 1

pd.DataFrame([*f(df)], columns=df.columns)

   id  date  value
0   1  2018    1.0
1   1  2018    1.0
2   1  2018    1.0
3   1  2018    1.0
4   1  2018    1.0
5   1  2018    0.1
6   2  2018    1.0
7   2  2018    1.0
8   1  2016    1.0

关于python-3.x - 根据字段值重现/中断行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52287299/

相关文章:

python - 如何将下面的 json 读入 pandas 数据帧?

python - 使用其他行中的值将函数应用于 pandas 数据框行

python - 编写多个 pandas dataframes 到 excel

pandas 组数据框,其中类别列具有最大总和值

python - 查找 pandas 中存在多个月的列值

python - 将占总数百分比的列添加到 Pandas 数据框

python-3.x - 如果关联 ID 的一部分匹配,则来自多行的平均值

django - 覆盖第三方应用程序的default_manager(Django)

python - 循环结构中的加速

python - Pandas 数据框之间的点划分忽略其中一个的第一列