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先生如预期般回答此问题!