2016-12-01 4 views
1

Все, у меня есть список питон, который имеет данные, как показано нижеПанды раскол из списка и уникальных строк

a_list = [['W1', 'W0'], ['W1', 'W2'], ['W3', 'W1'], ['W4', 'W6'], ['W5', 'W10'],  ['W6', 'W7'], ['W6', 'W7'],['W6','W7'],['W6','W7']] 

я хотел бы, чтобы преобразовать его в панд dataframe и я использовал код ниже

import pandas as pd 
df = pd.DataFrame(data = a_list) 
print(df) 

Вот вывод, что я вижу

0  1 
0 W1 W0 
1 W1 W2 
2 W3 W1 
3 W4 W6 
4 W5 W10 
5 W6 W7 
6 W6 W7 
7 W6 W7 
8 W6 W7 

Но я хочу, чтобы мой выход, чтобы быть в

 0  
0 W1,W0 
1 W1,W2 
2 W3,W1 
3 W4,W6 
4 W5,W10 
5 W6,W7 
6 W6,W7 
7 W6,W7 
8 W6,W7 

, а также я хотел бы устранить дубликаты, такие как строки # 6, имея счетчик на стороне

 0  count 
0 W1,W0  1 
1 W1,W2  1 
2 W3,W1  1 
3 W4,W6  1 
4 W5,W10  1 
5 W6,W7  4 

ответ

3

Использование drop_duplicates:

df1 = (df[0] + ',' + df[1]).drop_duplicates() 
print (df1) 
0  W1,W0 
1  W1,W2 
2  W3,W1 
3  W4,W6 
4 W5,W10 
5  W6,W7 
dtype: object 

Вы можете использовать cumcount по столбцу new :

df['new'] = (df[0] + ',' + df[1]) 
df['counter'] = df.groupby('new').cumcount() + 1 
print (df) 
    0 1  new counter 
0 W1 W0 W1,W0  1 
1 W1 W2 W1,W2  1 
2 W3 W1 W3,W1  1 
3 W4 W6 W4,W6  1 
4 W5 W10 W5,W10  1 
5 W6 W7 W6,W7  1 
6 W6 W7 W6,W7  2 

Использование groupby с агрегирование size:

print (df.groupby((df[0] + ',' + df[1])).size().reset_index(name='count')) 
    index count 
0 W1,W0  1 
1 W1,W2  1 
2 W3,W1  1 
3 W4,W6  1 
4 W5,W10  1 
5 W6,W7  4 
+0

спасибо, что помогли. Любая идея о том, как я могу получить счетчик? например, строка № 5 должна иметь счетчик 2, а все остальные должны иметь счетчик как 1 – RData

+0

, вы считаете, что строка '6'? – jezrael

+0

i означало 5 w6, w7 2 – RData

Смежные вопросы