[英]Python: Expand one row into multiple rows and make calculations
我有这两个观察:
Date Confirmed Cases
0 2020-12-27 100
1 2020-12-28 1000
在这个 dataframe 中,我想制作这张桌子:
Date Confirmed Cases
0 2020-12-27 100
1 2020-12-27 280
2 2020-12-27 460
3 2020-12-27 640
4 2020-12-27 820
5 2020-12-28 1000
基本上,我想将我的两行扩展为六行,其他四行的值将上升到第六行的值。
因此,如果我的第一行包含 100 个值,第二行包含 1000 个值,并且我想添加 4 个新行,则每行的相等部分为: (1000 - 100) / (4 + 1)
这是数据:
pd.DataFrame({"Date": ['2020-12-27', '2020-12-28'],
"Confirmed Cases": [100, 1000]})
利用 -
rows=4
df1 = pd.concat([df.iloc[0:1], pd.DataFrame([[np.nan]*df.shape[1]]*rows, columns=df.columns), df.iloc[-1:]], ignore_index=True)
df1['Confirmed_Cases'] = df1['Confirmed_Cases'].interpolate()
df1['Date'] = df1['Date'].ffill()
Output
Date Confirmed_Cases
0 2020-12-27 100.0
1 2020-12-27 280.0
2 2020-12-27 460.0
3 2020-12-27 640.0
4 2020-12-27 820.0
5 2020-12-28 1000.0
为此,您需要import numpy as np
。
这是另一个基于处理任意日期的enumerate/unstack/stack方法的选项:
rows = 4
(df.assign(enum=df.groupby('Date').cumcount())
.set_index(['enum', 'Date'])
.unstack('Date')
.reindex(range(rows + 1))
.stack('Date', dropna=False)
.sort_index(level='Date')
.reset_index('Date')
.interpolate()
.reset_index(drop=True)
).iloc[:-rows]
输入:
Date Confirmed Cases
0 2020-12-27 100
1 2020-12-28 1000
2 2020-12-29 5000
Output:
Date Confirmed Cases
0 2020-12-27 100.0
1 2020-12-27 280.0
2 2020-12-27 460.0
3 2020-12-27 640.0
4 2020-12-27 820.0
5 2020-12-28 1000.0
6 2020-12-28 1800.0
7 2020-12-28 2600.0
8 2020-12-28 3400.0
9 2020-12-28 4200.0
10 2020-12-29 5000.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.