2017-10-09 11 views
0

나는 과일의 팬더 dataFrame ::대소 문자 구분 팬더 시리즈 일치하고 깨끗한 팬더 시리즈 로직

df = pd.read_csv(newfile, header=None) 
df 
      0  1  2    3  4  5 6 7 
0  Apple Bananas  Fig Elderberry Cherry Honeydew NaN NaN 
1  Bananas Cherry Dragon Elderberry  NaN   NaN NaN NaN 
2  Cherry Grape  NaN   NaN  NaN   NaN NaN NaN 
3  Dragon  NaN Apple  Bananas Cherry Elderberry NaN NaN 
4 Elderberry Apple Bananas   Fig Grape   NaN NaN NaN 
5   Fig Cherry Honeydew   Apple  NaN   NaN NaN NaN 
6  Grape  NaN  NaN   NaN  NaN   NaN NaN NaN 
7  Honeydew Grape  Fig  Elderberry Dragon  Cherry Bananas Apple  

을하고 난 "과일 페어링", 예를 찾기 위해 노력하고있어 첫 번째 행에서 Apple과 Fig는 쌍을, 6 행은 Fig와 Apple입니다. 마찬가지로 Apple-Elderberry와 Elderberry-Apple은 그렇지만 Apple과 Bananas는 없습니다 (바나나에서 시작하는 사과는 없습니다).

나는 다음과 같은 코드 작업있어, 그이 ::

fruits = df[0] 
stock = df.drop(0, axis=1) 

for i in range(len(fruits)): 
    string1 = str(fruits[i]) 
    full_line = (stock.iloc[i]) 
    line = np.array(full_line.dropna(axis=0)) 
    if len(line) > 0 : 
     for j in range(len(stock)): 
      iind = (fruits[fruits == line[j]].index[0]) 
      this_line = stock.iloc[iind] 
      logic_out = this_line.str.match(string1) 
      print(logic_out) 

하지만 않습니다! (1) Pandas Series가 대소 문자를 구분하여 과일 == line [j]에서 깨지며 (2) boolean out은 True, Falses 및 NaN이 혼합 된 값입니다. 이상적으로, 나는 Trues를 계산하고 싶다. 모든 도움 v. 많이 감사!

답변

1

것은 내가 판다는 스태킹 세트 논리를 사용하는 것, 그리고

f = lambda x: x.title() if isinstance(x, str) else x 

s = df.applymap(f).set_index('0').rename_axis(None).stack().groupby(level=0).apply(set) 

f = s.index 
p = s.values 

one_way = (p[:, None] & [{x} for x in f]).astype(bool) 
[(f[i], f[j]) for i, j in zip(*np.where(one_way & one_way.T))] 

[('Apple', 'Elderberry'), 
('Apple', 'Fig'), 
('Apple', 'Honeydew'), 
('Bananas', 'Dragon'), 
('Bananas', 'Elderberry'), 
('Dragon', 'Bananas'), 
('Elderberry', 'Apple'), 
('Elderberry', 'Bananas'), 
('Fig', 'Apple'), 
('Fig', 'Honeydew'), 
('Honeydew', 'Apple'), 
('Honeydew', 'Fig')] 
+0

안녕 @piRSquared 방송 NumPy와있어,이 훌륭하지만 KeyError를 함께 첫 번째 줄에 충돌한다 : '0'메시지. ... 위의 코드를 편집하여 df에서 읽는 방법과 .cv 파일을 읽는 방법을 보여줍니다. – npross

+0

사과, 바나나,도, 엘더베리, 체리, 단 ,, 바나나, 체리, 용, 엘더베리 ,,,, 체리, 포도 ,,,,,, 용 ,, ,, 애플 바나나, 체리, 엘더베리, 엘더 베리, 애플, 바나나, 무화과, 포도, 무화과, 체리, 한니수, 사과 ,,,, 포도, ,,,,,, 단 물, 포도, 무화과, Elderberry, 드래곤, 체리, 바나나, 애플 – npross

+0

첫 번째 열의 실제 이름은 무엇입니까? 나는 그것이 여러분이 제공 한 데이터 프레임을 복사하고 지나갈 때 파싱되는 것이기 때문에''0 ''이라고 가정합니다. 잠시 후에 내 업데이트를 시도하십시오. – piRSquared