Python 向熊猫添加行以完成序列
完成熊猫数据帧的最佳方式是什么:Python 向熊猫添加行以完成序列,python,pandas,Python,Pandas,完成熊猫数据帧的最佳方式是什么: order | group | value -3 | a | 0 -2 | a | 3 -4 | b | 2 我想自动添加空行,以便order列以0结尾,按组值拆分(不必按顺序排列,只需要行存在) 您可以使用列表理解和重新索引 dfs = [df[df['group'] == g] for g in df.group.unique()] df_f = pd.concat([a.set_index('ord
order | group | value
-3 | a | 0
-2 | a | 3
-4 | b | 2
我想自动添加空行,以便order列以0结尾,按组值拆分(不必按顺序排列,只需要行存在)
您可以使用
列表理解
和重新索引
dfs = [df[df['group'] == g] for g in df.group.unique()]
df_f = pd.concat([a.set_index('order').reindex(range(a.iloc[0].order, 1)) for a in dfs])
df_f['group'] = df_f.group.ffill()
group value
order
-3 a 0.0
-2 a 3.0
-1 a NaN
0 a NaN
-4 b 2.0
-3 b NaN
-2 b NaN
-1 b NaN
0 b NaN
使用
groupby
然后reindex
df.groupby('group').\
apply(lambda x : x.set_index('order').reindex(-np.arange(max(x['order'].abs()+1)))).\
drop('group',1).reset_index()
Out[135]:
group order value
0 a 0 NaN
1 a -1 NaN
2 a -2 3.0
3 a -3 0.0
4 b 0 NaN
5 b -1 NaN
6 b -2 NaN
7 b -3 NaN
8 b -4 2.0
非常感谢。你能解释一下发生了什么吗?@NBC我们只是一组一组地分组,然后为每个子集重新编制索引,将顺序设置为dex,并使用最小值(即abs最大值)为每个组创建索引
df.groupby('group').\
apply(lambda x : x.set_index('order').reindex(-np.arange(max(x['order'].abs()+1)))).\
drop('group',1).reset_index()
Out[135]:
group order value
0 a 0 NaN
1 a -1 NaN
2 a -2 3.0
3 a -3 0.0
4 b 0 NaN
5 b -1 NaN
6 b -2 NaN
7 b -3 NaN
8 b -4 2.0