首页 > 解决方案 > 满足条件时重新格式化数据框/添加行

问题描述

我希望在满足条件时添加数据框行并编辑列。我希望 B 列只有“1”。如果该值大于 1,则添加等于 > 1 的数字的行长度,同时保持 ColA 按日期升序排序。下面的例子:

原DF:

   ColA        ColB
2021-03-09       1
2021-03-09       3
2021-03-10       2
2021-03-10       1
2021-03-10       2
2021-03-11       2

所需的DF

   ColA         ColB
2021-03-09       1
2021-03-09       1
2021-03-09       1
2021-03-09       1
2021-03-10       1
2021-03-10       1
2021-03-10       1
2021-03-10       1
2021-03-10       1
2021-03-11       1
2021-03-11       1

任何建议都非常感谢!

标签: pythonpandasdataframe

解决方案


假设您只有正整数,'ColB'您可以使用np.repeat. 重复处理重复,因此我们可以分配 ColB = 1。

import pandas as pd
import numpy as np

df = (pd.DataFrame(np.repeat(df.ColA, df.ColB))
        .assign(ColB=1))

或者,如果你有一个非重复的索引,你可以重复它并使用它loc来获取 repitition。当您有多个要重复的列时很有用:

df = (df.loc[df.index.repeat(df.ColB)]
        .assign(ColB=1))

         ColA  ColB
0  2021-03-09     1
1  2021-03-09     1
1  2021-03-09     1
1  2021-03-09     1
2  2021-03-10     1
2  2021-03-10     1
3  2021-03-10     1
4  2021-03-10     1
4  2021-03-10     1
5  2021-03-11     1
5  2021-03-11     1

推荐阅读