Restructure data table from individual to dyadic structure

This script requires python3+ and pandas library.

Install pandas with pip : python -m pip install --upgrade pandas in command prompt/terminal

Individual structure :

dyadic_individual_structure.gif

Dyadic structure :

dyadic_dyadic_structure.gif

Code

In [1]:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import pandas as pd

Specify folder path

In [2]:
os.chdir('D:\\Google Drive\\1-These\\13-EATMINT2\\Analyses\\Questionnaires')

Specify .csv file name

In [3]:
df1 = pd.read_csv('questionnaire_raw_data_individual_structure.csv',sep=';')

First table lines

In [4]:
df1.head()
Out[4]:
Dyade Sujet Sexe Condition Score Raven Activation_soi Anxiété_soi Colère_soi Contrôle_soi Déception_soi ... Mon partenaire mettait nos différences en évidence Mon partenaire n'était pas réceptif à ce que je lui disais Mon partenaire n'était pas très sûr de lui Mon partenaire ne se fiait pas à ce que je lui proposais Mon partenaire ne semblait pas enthousiasmé par nos échanges Mon partenaire se comportait comme s'il était plus fort que moi Mon partenaire se montrait aimable envers moi Mon partenaire se montrait autant intéressé par la construction d'une bonne entente entre nous que par la résolution de la tâche Mon partenaire se montrait tendu et\ou agacé Mon partenaire voulait rester coller à l'objectif principal de la tâche
0 1 1 H CBVB 20.0 4 1.0 3 2.0 6.0 ... 1.0 2.0 5.0 3 1 1.0 7 6 1 3.0
1 1 2 H CBVB 22.0 4 1.0 1 2.0 5.0 ... 1.0 1.0 2.0 1 1 1.0 7 7 1 6.0
2 2 1 H CBVH 19.0 5 2.0 3 4.0 2.0 ... 2.0 1.0 2.0 1 1 1.0 7 7 4 7.0
3 2 2 H CBVH 17.0 4 3.0 1 5.0 1.0 ... 1.0 2.0 2.0 3 1 5.0 6 7 2 4.0
4 3 1 H CHVB 23.0 4 6.0 2 3.0 6.0 ... 5.0 1.0 4.0 1 1 1.0 6 7 4 5.0

5 rows × 125 columns

Delete columns without data structure change needed

In [5]:
data = df1.drop(['Dyade','Sujet','Sexe','Condition'], axis = 1)
data.head()
Out[5]:
Score Raven Activation_soi Anxiété_soi Colère_soi Contrôle_soi Déception_soi Désespoir_soi Ennui_soi Espoir_soi Fierté_soi ... Mon partenaire mettait nos différences en évidence Mon partenaire n'était pas réceptif à ce que je lui disais Mon partenaire n'était pas très sûr de lui Mon partenaire ne se fiait pas à ce que je lui proposais Mon partenaire ne semblait pas enthousiasmé par nos échanges Mon partenaire se comportait comme s'il était plus fort que moi Mon partenaire se montrait aimable envers moi Mon partenaire se montrait autant intéressé par la construction d'une bonne entente entre nous que par la résolution de la tâche Mon partenaire se montrait tendu et\ou agacé Mon partenaire voulait rester coller à l'objectif principal de la tâche
0 20.0 4 1.0 3 2.0 6.0 2.0 5 NaN 3 ... 1.0 2.0 5.0 3 1 1.0 7 6 1 3.0
1 22.0 4 1.0 1 2.0 5.0 2.0 1 5.0 2 ... 1.0 1.0 2.0 1 1 1.0 7 7 1 6.0
2 19.0 5 2.0 3 4.0 2.0 1.0 1 3.0 5 ... 2.0 1.0 2.0 1 1 1.0 7 7 4 7.0
3 17.0 4 3.0 1 5.0 1.0 2.0 1 7.0 5 ... 1.0 2.0 2.0 3 1 5.0 6 7 2 4.0
4 23.0 4 6.0 2 3.0 6.0 2.0 1 2.0 5 ... 5.0 1.0 4.0 1 1 1.0 6 7 4 5.0

5 rows × 121 columns

Put columns names in a list

In [6]:
variables = data.columns

Create a new data frame

In [7]:
new_data = pd.DataFrame()

For each column, get even values and put them in p1 (resp. odd values in p2). Give the same index to both p1 and p2. Add both renamed columns in the data frame

In [8]:
for i in variables:
    p1 = data[i].iloc[::2]
    p1.index = range(1,len(p1)+1)
    
    p2 = data[i].iloc[1::2]
    p2.index = range(1,len(p2)+1)

    v = i
    v1 = i + '_p1'
    v2 = i + '_p2'
    
    new_data[v1] = p1
    new_data[v2] = p2
In [9]:
new_data.head()
Out[9]:
Score Raven_p1 Score Raven_p2 Activation_soi_p1 Activation_soi_p2 Anxiété_soi_p1 Anxiété_soi_p2 Colère_soi_p1 Colère_soi_p2 Contrôle_soi_p1 Contrôle_soi_p2 ... Mon partenaire se comportait comme s'il était plus fort que moi_p1 Mon partenaire se comportait comme s'il était plus fort que moi_p2 Mon partenaire se montrait aimable envers moi_p1 Mon partenaire se montrait aimable envers moi_p2 Mon partenaire se montrait autant intéressé par la construction d'une bonne entente entre nous que par la résolution de la tâche_p1 Mon partenaire se montrait autant intéressé par la construction d'une bonne entente entre nous que par la résolution de la tâche_p2 Mon partenaire se montrait tendu et\ou agacé_p1 Mon partenaire se montrait tendu et\ou agacé_p2 Mon partenaire voulait rester coller à l'objectif principal de la tâche_p1 Mon partenaire voulait rester coller à l'objectif principal de la tâche_p2
1 20.0 22.0 4 4 1.0 1.0 3 1 2.0 2.0 ... 1.0 1.0 7 7 6 7 1 1 3.0 6.0
2 19.0 17.0 5 4 2.0 3.0 3 1 4.0 5.0 ... 1.0 5.0 7 6 7 7 4 2 7.0 4.0
3 23.0 21.0 4 4 6.0 4.0 2 5 3.0 3.0 ... 1.0 1.0 6 7 7 7 4 1 5.0 7.0
4 21.0 21.0 4 4 3.0 3.0 2 3 5.0 NaN ... 5.0 1.0 7 6 6 7 1 2 6.0 6.0
5 23.0 22.0 4 4 1.0 2.0 1 1 4.0 2.0 ... 4.0 2.0 7 6 7 7 1 2 5.0 6.0

5 rows × 242 columns

Export restructured data

In [11]:
new_data.to_csv('out.csv',sep=';')