我的 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/