2017-02-18 27 views
1

我想查找熊貓列的二進制字符串中每個數字的模式值。假設我有以下數據熊貓列的二進制字符串中的每個數字的模式

df = pd.DataFrame({'categories':['A','B','C'],'values':['001','110','111']}) 

使我的數據是這樣的

categories values 
A    001 
B    110 
C    111 

如果我們考慮列「值」在第一個數字(0,1,1)中,B,和C分別爲模式值爲1.如果我們對其他數字做同樣的事情,我的預期輸出應該是111.

我可以找到特定列的模式值。如果我將每一位分成一個新列並找到模式值。以後我可以通過串聯獲得預期的輸出。但是,當數據有更多的二進制字符串列時,我不確定這種方法是否仍然是一個好方法。我正在尋找更優雅的方法來做到這一點。我可以提供你的建議嗎?

回答

2

我認爲你可以使用applySerieslist的轉換digits到列,然後mode

print (df['values'].apply(lambda x: pd.Series(list(x)))) 
    0 1 2 
0 0 0 1 
1 1 1 0 
2 1 1 1 

df1 = df['values'].apply(lambda x: pd.Series(list(x))).mode() 
print (df1) 
    0 1 2 
0 1 1 1 

最後選擇行,創建listjoin

print (''.join(df1.iloc[0].tolist())) 
111 

用另一種可能的解決方案list comprehension

df = pd.DataFrame([list(x) for x in df['values']]) 
print (df) 
    0 1 2 
0 0 0 1 
1 1 1 0 
2 1 1 1 

如果輸出DataFrame可以使用applyjoin

df = pd.DataFrame({'categories':['A','B','C', 'D'],'values':['001','110','111', '000']}) 
print (df) 
    categories values 
0   A 001 
1   B 110 
2   C 111 
3   D 000 

print (pd.DataFrame([list(x) for x in df['values']]).mode()) 
    0 1 2 
0 0 0 0 
1 1 1 1 

df1 = pd.DataFrame([list(x) for x in df['values']]).mode().apply(''.join, axis=1) 
print (df1) 
0 000 
1 111 
dtype: object 
相關問題