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
vshead
?)@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: []