Python 获取第n行组并填入';无';如果缺少行

Python 获取第n行组并填入';无';如果缺少行,python,pandas,Python,Pandas,我有一个df: a b c 1 2 3 6 2 2 5 7 3 4 6 8 我希望每N行groupby a: w=df.groupby('a').nth(0) #first row x=df.groupby('a').nth(1) #second row df的第二组没有第二行,在本例中,我希望有“None”值 [In:] df.groupby('a').nth(1) [Out:] a b c 1 2 5 7 2 None None

我有一个df:

   a  b  c
1  2  3  6
2  2  5  7
3  4  6  8
我希望每N行groupby a:

w=df.groupby('a').nth(0) #first row
x=df.groupby('a').nth(1)  #second row
df的第二组没有第二行,在本例中,我希望有“None”值

[In:] df.groupby('a').nth(1)
[Out:]

  a    b    c
1 2    5    7
2 None None None
或者更简单一些:
df在组内有1-4行。如果一个组少于4行,我想扩展该组,使其有4行,并用“无”填充缺少的行。之后,如果我选择第n行组,我将获得所需的输出。

一种方法是分配一个计数/秩列和重新索引/堆栈:

n=2
(df.assign(rank=df.groupby('a').cumcount())
   .query(f'rank < @n')
   .set_index(['a','rank'])
   .unstack('rank')
   .stack('rank', dropna=False)
   .reset_index()
   .drop('rank', axis=1)      
)

一种方法是分配计数/秩列并重新索引/堆栈:

n=2
(df.assign(rank=df.groupby('a').cumcount())
   .query(f'rank < @n')
   .set_index(['a','rank'])
   .unstack('rank')
   .stack('rank', dropna=False)
   .reset_index()
   .drop('rank', axis=1)      
)

如果您对某个特定的<代码> NTH <代码>感兴趣,但在某些组中没有足够的行,则可以考虑使用“<代码> ReCurdie >从< A:< /P>中的<代码>唯一< /代码>值。

print (df.groupby('a').nth(1).reindex(df['a'].unique()).reset_index())
   a    b    c
0  2  5.0  7.0
1  4  NaN  NaN

如果您对某个特定的<代码> NTH <代码>感兴趣,但在某些组中没有足够的行,则可以考虑使用“<代码> ReCurdie >从< A:< /P>中的<代码>唯一< /代码>值。

print (df.groupby('a').nth(1).reindex(df['a'].unique()).reset_index())
   a    b    c
0  2  5.0  7.0
1  4  NaN  NaN