2016-03-07 75 views
1

我有这样一个数据帧:合并多个列在一个数据帧

dataf = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': ['c', 'c',np.nan]}) 


get_dummies(df): 

    A_a  A_b  B_a  B_b  B_c C_c 
0 1  0  0  1  0  1 
1 0  1  1  0  0  1 
2 1  0  0  0  1  0 

我想数据帧的所有共同的属性是在一列。这里对于属性'a',我们有两列,即A_a & B_a。我希望在名称为'a'的一列中以及值为A_a & B_a的UNION。它应该适用于所有类似的属性。它应该看起来像:

a  b  c 
0 1  1  1 
1 1  1  1 
2 1  0  1 

原来,我有成百上千的属性,以百万+行。因此一个通用公式将起作用。谢谢。

回答

0

您可以添加参数prefixprefix_sepget_dummies然后columnsgroupbysum

import pandas as pd 
import numpy as np 
import io 

dataf = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': ['c', 'c',np.nan]}) 
print dataf 
    A B C 
0 a b c 
1 b a c 
2 a c NaN 

df = pd.get_dummies(dataf, prefix="", prefix_sep="") 
print df 
    a b a b c c 
0 1 0 0 1 0 1 
1 0 1 1 0 0 1 
2 1 0 0 0 1 0 

print df.groupby(df.columns, axis=1).sum() 
    a b c 
0 1 1 1 
1 1 1 1 
2 1 0 1 

编辑由comment,谢谢约翰·高尔特:

如果值lenght = 1(如样品) :

df = pd.get_dummies(dataf) 
print df 
    A_a A_b B_a B_b B_c C_c 
0 1 0 0 1 0 1 
1 0 1 1 0 0 1 
2 1 0 0 0 1 0 

print df.groupby(df.columns.str[-1:], axis=1).any().astype(int) 
    a b c 
0 1 1 1 
1 1 1 1 
2 1 0 1 
+1

不使用'prefix =“”, prefix_sep =“”'你可以做,'df.groupby(df.columns.str [-1:],axis = 1).sum()'也许为了更好的可读性,'.any()。astype(int) ' - 这样工会不会超过1? – Zero

+0

你说得对,但是如果改变'df'中的值,它就不起作用。 – jezrael

+0

你有一个点。我有点尖锐与多个具有相同名称的列。 – Zero

相关问题