Python 3.x 基于字段值复制/断开行

Python 3.x 基于字段值复制/断开行,python-3.x,pandas,pandas-groupby,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 la

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

为了更好的理解,只考虑第一行<代码>数据文件< /代码>,即:

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        date     value
1         2016     1.1
id        date     value
1         2016     1
1         2016     0.1
i、 e.如果存在任何分数,则将其单独分解,否则将其分解为一个单位

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

i、 e.新的
数据帧将如下所示:

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"])

将//和%与熊猫一起使用
重复

s1=df.value//1
s2=df.value%1
s=pd.concat([s1.loc[s1.index.repeat(s1.astype(int))],s2[s2!=0]]).sort_index()
s.loc[s>=1]=1
newdf=df.reindex(df.index.repeat((s1+(s2).ne(0)).astype(int)))  
newdf['value']=s.values
newdf
Out[236]:
   id  date  value
0   1  2016    1.0
0   1  2016    1.0
0   1  2016    1.0
1   2  2016    1.0
2   1  2018    1.0
3   1  2016    1.0
3   1  2016    0.1
发电机
@AashishGahlawat yw:-)感谢@piRSquared先生如预期般回答此问题!