2014-09-03 87 views
0

我df是这样的:熊猫集团

1 2 3 
A abc ab 
A abc cc 
A abc ab 

我想通过组记录有

1 2 3 
A abc ab 
A abc cc 

,甚至更好,具有连接字符串,一个场:

1 
A_abc_ab 
A_abc_cc 

大熊猫的GroupBy似乎并不与字符串的工作:

df = df.groupby(['1','2','3']) 

回报

<pandas.core.groupby.DataFrameGroupBy object at 0x7f4a37549bd0> 

回答

3

由此开始:

1 2 3 
A abc ab 
A abc cc 
A abc ab 

要这样:

1 2 3 
A abc ab 
A abc cc 

不涉及分组可言!你只是丢弃重复:

In [9]: df.drop_duplicates() 
Out[9]: 
    1 2 3 
0 A abc ab 
1 A abc cc 

然后您可以使用适用于串联:

In [10]: df.drop_duplicates().apply('_'.join, axis=1) 
Out[10]: 
0 A_abc_ab 
1 A_abc_cc 
dtype: object 
+0

'drop_duplicates()是正确的功能。来自sql我立即想到GROUP BY。如果fierst列是intger类型,则建议将其转换为字符串并使用apply? – 2014-09-03 15:41:18

+0

@franco_b你可以使用'df [1] = df [1] .apply(str)'来强制转换为字符串。是的,这是要么,或者应用自定义函数而不是'_'。join'。 – Korem 2014-09-03 15:53:51

4

你是不是正确运用groupby。此外groupby后,你必须group.aggregate(),以减少一些功能的基础上,细胞

也许你可能想这更好:

df.apply('-'.join, axis=1) 

产生

0 A-abc-ab 
1 A-abc-cc 
2 A-abc-ab 
dtype: object 

当然可以drop_duplicates加入之前