如何将连续行填充到熊猫数据框?
Posted
技术标签:
【中文标题】如何将连续行填充到熊猫数据框?【英文标题】:How to fill continuous rows to panda dataframe? 【发布时间】:2020-10-02 09:06:29 【问题描述】:我有一个如下所示的数据框:
name date value
0 a 2020-01-01 1
1 a 2020-01-03 1
2 a 2020-01-05 1
3 b 2020-01-02 1
4 b 2020-01-03 1
5 b 2020-01-04 1
6 b 2020-01-05 1
这些值是由value_df = df.groupby(['name', 'date'], as_index=False).value.sum()
计算的
我怎样才能做到以下几点:
name date value
0 a 2020-01-01 1
1 a 2020-01-02 1
2 a 2020-01-03 1
3 a 2020-01-04 1
4 a 2020-01-05 1
5 b 2020-01-01 1
6 b 2020-01-02 1
7 b 2020-01-03 1
8 b 2020-01-04 1
9 b 2020-01-05 1
我试过了
date_index = pd.date_range(start=min(df['date']), end=max(df['date']))
value_df['value'] = pd.Series(value_df['value'])
value_df.reindex(date_index)
这没有什么不同。
【问题讨论】:
我感觉你的value
不全是1
的。
【参考方案1】:
尝试旋转然后堆叠:
date_index = pd.date_range(start=df['date'].min(), end=df['date'].max())
(df.pivot_table('value','name','date',fill_value=1)
.reindex(date_index,axis=1).reset_index().melt('name',var_name='date'))
或者:
(df.pivot_table('value','name','date',fill_value=1)
.reindex(date_index,axis=1).stack().reset_index(name='value'))
name date value
0 a 2020-01-01 1
1 a 2020-01-02 1
2 a 2020-01-03 1
3 a 2020-01-04 1
4 a 2020-01-05 1
5 b 2020-01-01 1
6 b 2020-01-02 1
7 b 2020-01-03 1
8 b 2020-01-04 1
9 b 2020-01-05 1
【讨论】:
【参考方案2】:我们可以先pivot
然后stack
s=df.pivot(*df.columns).ffill().bfill().stack().to_frame('value').reset_index()
Out[199]:
name date value
0 a 2020-01-01 1.0
1 a 2020-01-02 1.0
2 a 2020-01-03 1.0
3 a 2020-01-04 1.0
4 a 2020-01-05 1.0
5 b 2020-01-01 1.0
6 b 2020-01-02 1.0
7 b 2020-01-03 1.0
8 b 2020-01-04 1.0
9 b 2020-01-05 1.0
【讨论】:
非常感谢,我这样做了,行已正确扩展,但如何将插入的值设置为 0? s=df.pivot(*df.columns).fillba(0).stack().to_frame('value').reset_index() @heisthere【参考方案3】:如果你的数据(value
)不是全部1
,你可以做ffill
,bfill
:
(df.set_index(['date','name'])
.unstack().reindex(date_index)
.ffill().bfill()
.stack()
.reset_index()
)
输出:
date name value
0 2020-01-01 a 1.0
1 2020-01-01 b 1.0
2 2020-01-02 a 1.0
3 2020-01-02 b 1.0
4 2020-01-03 a 1.0
5 2020-01-03 b 1.0
6 2020-01-04 a 1.0
7 2020-01-04 b 1.0
8 2020-01-05 a 1.0
9 2020-01-05 b 1.0
【讨论】:
以上是关于如何将连续行填充到熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章