如何在Pandas中组合数据框并保留列

时间:2015-07-22 17:01:02

标签: python pandas

给出一个数据框,记录一些书的使用情况:

getUTC___()

我需要得到所有书籍的数量,保留其他列并得到这个:

Name   Type   ID
Book1  ebook  1
Book2  paper  2
Book3  paper  3
Book1  ebook  1
Book2  paper  2

如何做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:48)

您需要以下内容:

In [20]:
df.groupby(['Name','Type','ID']).count().reset_index()

Out[20]:
    Name   Type  ID  Count
0  Book1  ebook   1      2
1  Book2  paper   2      2
2  Book3  paper   3      1

在您的情况下,“姓名”,“类型”和“ID”列匹配值,因此我们可以groupby对其进行调用,调用count然后调用reset_index

另一种方法是使用transform添加“计数”列,然后调用drop_duplicates

In [25]:
df['Count'] = df.groupby(['Name'])['ID'].transform('count')
df.drop_duplicates()

Out[25]:
    Name   Type  ID  Count
0  Book1  ebook   1      2
1  Book2  paper   2      2
2  Book3  paper   3      1

答案 1 :(得分:31)

我认为as_index = False应该可以解决问题。

df.groupby(['Name','Type','ID'], as_index=False).count()

答案 2 :(得分:2)

如果df中有许多列,则可以使用df.groupby(['foo']).agg(...),请参见here。使用.agg()函数,您可以选择不要对操作进行操作的列。如果只想保留它们,请使用.agg({'col1': 'first', 'col2': 'first', ...}。除了'first'以外,您还可以应用'sum''mean'等。