Python 在groupby之后数据为空时是否保留列?

Python 在groupby之后数据为空时是否保留列?,python,pandas,Python,Pandas,我可以让第二个创建一个空的数据帧,但与第一个输出中的列相同吗? (主要是保持两种情况下的接口相同) 我想要像下面这样的东西 (Pdb) df.head() Empty DataFrame Columns: [user_id, review_meta_id, rating_type, score, timestamp, user_id_index, review_meta_id_index] Index: [] (Pdb) df.groupby(['user_id'], as_index=Fal

我可以让第二个创建一个空的数据帧,但与第一个输出中的列相同吗?
(主要是保持两种情况下的接口相同)

我想要像下面这样的东西

(Pdb) df.head()
Empty DataFrame
Columns: [user_id, review_meta_id, rating_type, score, timestamp, user_id_index, review_meta_id_index]
Index: []

(Pdb) df.groupby(['user_id'], as_index=False).apply(lambda grp: grp.nlargest(M, 'timestamp'))
Empty DataFrame
Columns: []
Index: []

您可以使用更快的替代解决方案和:



也许您可以将
df.columns
存储为一个变量,然后在groupby之后重新分配
df.columns=x
。再次感谢,您能否提供一些信息,说明为什么看起来相同的操作会导致两种不同的数据格式?(我想这是因为
apply
vs
head
?)@eugene-确切地说,更一般,所以工作方式不同。
(Pdb) df.groupby(['user_id'], as_index=False).apply(lambda grp: grp.nlargest(M, 'timestamp'))
 Empty DataFrame
Columns: [user_id, review_meta_id, rating_type, score, timestamp, user_id_index, review_meta_id_index]
Index: []
M = 3
df = pd.DataFrame({'user_id':[1] * 5 + [2] * 4,
                   'timestamp':range(9)})
print (df)
   user_id  timestamp
0        1          0
1        1          1
2        1          2
3        1          3
4        1          4
5        2          5
6        2          6
7        2          7
8        2          8

print (df.sort_values(['user_id','timestamp'], ascending=[True, False])
         .groupby('user_id')
         .head(M))

   user_id  timestamp
4        1          4
3        1          3
2        1          2
8        2          8
7        2          7
6        2          6
df = pd.DataFrame(columns=['user_id','timestamp'])
print (df)
Empty DataFrame
Columns: [user_id, timestamp]
Index: []

print (df.sort_values(['user_id','timestamp'], ascending=[True, False])
         .groupby('user_id')
         .head(M))
Empty DataFrame
Columns: [user_id, timestamp]
Index: []