3

I would like to transform my list of tuples so that the first element of each tuple represents 2 different columns. The second element of each tuple should represent the values that correspond to the columns in the pandas df.

My current list of tuples:


list_tuples = [('G', 9.8), ('B', 4.2), ('G', 9.6), ('B', 2.3), ('G',7.6), ('B', 3.1)]

Desired output:


            G        B   
           9.8      4.2      
           9.6      2.3      
           7.6      3.1      

The code I currently have which does not give desired output:


df = pd.DataFrame(list_tuples, columns=['G', 'B'])

blah
  • 674
  • 3
  • 17

2 Answers2

6

Use defaultdict for convert list of tuples for dictionary of lists and then pass it to DataFrame constructor:

from collections import defaultdict

d = defaultdict(list)
for a, b in list_tuples:
    d[a].append(b)
df = pd.DataFrame(d)
print (df)
     G    B
0  9.8  4.2
1  9.6  2.3
2  7.6  3.1
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
3

Convert it to a dictionary, create your dataframe and clean it up with DataFrame.drop_duplicates and DataFrame.bfill:

list_tuples = [('G', 9.8), ('B', 4.2), ('G', 9.6), ('B', 2.3), ('G',7.6), ('B', 3.1)]

df = (pd.DataFrame([{col1:val} for col1, val in list_tuples])
        .bfill()
        .drop_duplicates('B')
        .reset_index(drop=True)
     )
     G    B
0 9.80 4.20
1 9.60 2.30
2 7.60 3.10
Erfan
  • 40,971
  • 8
  • 66
  • 78