credenco
credenco

Reputation: 287

verify if cell is the same and build an excelfile

I have some measurements(as a dict) and a list with labels. Need to verify if labels are in my measurements and write it to an excelfile.

my output-excelfile need to look like this.

list1 = ['A', 'B', 'C', 'D']

measurement1 = {'A':1, 'B':1}
measurement2 = {'C':3, 'D':4}

#Output
                    'A'     'B'     'C'     'D'
measurement1         1       1       0       0
measurement2         0       0       1       1

I have no idea how to build the matrix with (0,1) Hope you can help me.

EDIT

Finally i got a solution. At first i iterate over all measurements and wrote to dict measurements all missing labels. Than building a dataframe with ones and putting with 3 loops zeros in the dataframe to the msising positions with .loc

d = pd.DataFrame(1, index = measurements.keys(), columns = list1)
for y in measurements.keys():
    for z in measurements[y]:
        for x in list1:
            if x == z:
                d.loc[y,z] = 0

Maybe its possible to make it with only 2 loops.

Upvotes: 0

Views: 55

Answers (3)

anky
anky

Reputation: 75080

You can use a list of the dictionaries ad create a dataframe then reindex with the list and convert to bool by checking notna

pd.DataFrame([measurement1,measurement2]).reindex(columns=list1).notna().astype(int)

   A  B  C  D
0  1  1  0  0
1  0  0  1  1

Upvotes: 1

Óscar López
Óscar López

Reputation: 236004

This should work, using only standard Python:

list1 = ['A', 'B', 'C', 'D']
measurement1 = {'A':1, 'B':1}
measurement2 = {'C':3, 'D':4}

measurements = [measurement1, measurement2]
headers = { h: i for i, h in enumerate(list1) }

matrix = []
for measurement in measurements:
    row = [0] * len(headers)
    for header in measurement.keys():
        row[headers[header]] = 1
    matrix.append(row)

For your example, the output will be:

matrix
=> [[1, 1, 0, 0], [0, 0, 1, 1]]

Upvotes: 1

jezrael
jezrael

Reputation: 862601

Use nested list comprehension with filtering for check membership in list1 and last create DataFrame by constructor:

list1 = ['A', 'B', 'C', 'D']

measurement1 = {'A':1, 'B':1}
measurement2 = {'C':3, 'D':4}

L = [measurement1, measurement2]
d = [dict.fromkeys([y for y in x.keys() if y in list1], 1) for x in L]
df = pd.DataFrame(d).fillna(0).astype(int)
print (df)
   A  B  C  D
0  1  1  0  0
1  0  0  1  1

Upvotes: 2

Related Questions