2017-11-11 1 views
1

나는 목록으로 주문 내에서 항목을 얻을 수있는 CSV를 바꿀려고 내에서 항목의 목록을 가져올 CSV를 바꿀.파이썬 팬더 카테고리

나는 상판과 같은 뭔가를하고 아래 테이블을 얻을합니다. 미리 감사드립니다! 이 줄리아처럼 enter image description here

답변

3

,

import pandas as pd 

df = pd.DataFrame({'mmddyyyy':['1/22/17']*5, 
        'customer_id':[1,1,2,2,2], 
        'order_id':[67,67,50,51,51], 
        'item_id':['hat','hat','pants','hat','pants']}) 

df 

출력 :

이제
customer_id item_id mmddyyyy order_id 
0   1  hat 1/22/17  67 
1   1  hat 1/22/17  67 
2   2 pants 1/22/17  50 
3   2  hat 1/22/17  51 
4   2 pants 1/22/17  51 

,의 다음 reset_indexapplygroupbylist을 실행하자 :

df.groupby(['mmddyyyy','customer_id','order_id'])['item_id']\ 
    .apply(list).reset_index() 

출력 resu lt df :

mmddyyyy customer_id order_id  item_id 
0 1/22/17   1  67 [hat, hat] 
1 1/22/17   2  50  [pants] 
2 1/22/17   2  51 [hat, pants] 
+0

저에게 승리하는 전략처럼 보입니다! – piRSquared

1

다음과 같이하십시오.

import pandas as pd 

dataframe_top = pd.read_csv('your_file.csv') 
dataframe_bottom = dataframe_top.groupby('order_id').agg({ 
    'mmddyyyy': 'first', 
    'customer_id': 'first', 
    'item_id': lambda x: list(x) 
}).reset_index() 

또한, 다음도 작동합니다 :

import pandas as pd 

dataframe_top = pd.read_csv('your_file.csv') 
dataframe_bottom = dataframe_top\ 
    .groupby(['mmddyyyy', 'customer_id', 'order_id'])\ 
    .apply(list)[['item_id']]\ 
    .reset_index() 

를 두 경우 모두, 우리는 order_id에 의해 그룹화하고, 열 item_id로 기능 list를 적용하고 있습니다. 모든 순서 식별자 어쨌든 동일한 mmddyyyycustomer_id을 가지고 있기 때문에 두 번째의 경우, 처음 세 열로 그룹화하는 단계, 생성 된 테이블의 행의 구조를 변경하지 않는다. https://chrisalbon.com/python/pandas_apply_operations_to_groups.html

이 (가) agg 방법에 대해 다음을 참조하십시오 :

는하여 groupby 방법에 대해 다음을 참조하십시오. http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html 이 (링크에서 In [20]:In [21]:까지 아래로 스크롤합니다.)합니다 (groupby 개체의 방법은, 단지 groupby 방법의 끝에 추가 할 수 있습니다 IE)

편집 : 최종 참고 :이 확실 니가 원하는거야? 이것은 궁극적 인 목표의 중간 단계와 같습니다. 궁극적 인 목표는 실제로이 변환을 필요로하지 않지만 일부 다른 기능은 groupby입니다. 대신 최종 목표를 달성하는 방법을 묻는 것을 고려하십시오.