Python:如何用零填充?

3
假设我们有一个如下的数据框:
df = pd.DataFrame({ 'Col1' : ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c'],
        'col2' : ['0.5', '0.78', '0.78', '0.4', '2', '9', '2', '7',]
        })

我统计了在col1中所有唯一值的行数。例如,a有4行,bc各有2行,方法如下:

df.groupby(['Col1']).size()

然后我得到的输出结果为

Col1
a    4
b    2
c    2
dtype: int64

完成此操作后,我想要检查a、b、c中哪个具有最大的行数(在本例中,a拥有最大的行数),并使用它们与最大值之间的差异来填充其他变量(bc),填充值为零(由于bc各有2行,而4是最大行数,我想用2个零来填充bc)。这些零必须添加到末尾。
我希望添加零,因为我想在所有变量(a、b、c)上应用固定尺寸的窗口以绘制图表。
2个回答

3

你可以使用GroupBy.cumcount创建计数器,并通过MultiIndex.from_product创建所有组合的MultiIndex,再使用DataFrame.reindex来重建数据框。

df1 = df.set_index(['Col1', df.groupby('Col1').cumcount()])

mux = pd.MultiIndex.from_product(df1.index.levels, names=df1.index.names)
df2 = df1.reindex(mux, fill_value=0).reset_index(level=1, drop=True).reset_index()
print (df2)
   Col1  col2
0     a   0.5
1     a  0.78
2     a  0.78
3     a   0.4
4     b     2
5     b     9
6     b     0
7     b     0
8     c     2
9     c     7
10    c     0
11    c     0

1
同样的逻辑像Jez使用一样,但是使用和链。
df.assign(key2=df.groupby('Col1').cumcount()).set_index(['Col1','key2']).unstack(fill_value=0).stack().reset_index('Col1')
Out[1047]: 
     Col1  col2
key2           
0       a   0.5
1       a  0.78
2       a  0.78
3       a   0.4
0       b     2
1       b     9
2       b     0
3       b     0
0       c     2
1       c     7
2       c     0
3       c     0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接