繁体   English   中英

Python:将一行展开为多行并进行计算

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM