I am trying to read .csv file into dictionary in a certain format. Below is the reproducible format for the dataframe.
# initialize list of lists
data = [['fac1', 1,11], ['fac1', 2,12], ['fac1',3,13],['fac2',1,8],['fac2',2,9],['fac2',3,20]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=['facility', 'customer','distance'])
print(df)
Output
facility customer distance
fac1 1 11
fac1 2 12
fac1 3 13
fac2 1 8
fac2 2 9
fac2 3 20
I want to read this into a dictionary in certain format below
{'Fac-1': {1: 4, 2: 5, 3: 6, 4: 8, 5: 10},
'Fac-2': {1: 6, 2: 4, 3: 3, 4: 5, 5: 8},
'Fac-3': {1: 9, 2: 7, 3: 4, 4: 3, 5: 4}}
CodePudding user response:
Have you tried something like this :
# Create the pandas DataFrame
df = pd.DataFrame(data, columns=["facility", "customer", "distance"])
dict = {
k.replace("fac", "Fac_"): {c.customer: c.distance for _, c in v.iterrows()}
for k, v in df.groupby(["facility"])
}
CodePudding user response:
You can create a method to set the values inside dict to columns.
The external keys are facility
, the dict internal keys are customer
, and your values are distance
. Have you tried something like this:
import pandas as pd
def dict_to_values(key, value):
return len(value.keys())*[key], list(value.keys()), list(value.values())
d = {'Fac-1': {1: 4, 2: 5, 3: 6, 4: 8, 5: 10}, 'Fac-2': {1: 6, 2: 4, 3: 3, 4: 5, 5: 8}, 'Fac-3': {1: 9, 2: 7, 3: 4, 4: 3, 5: 4}}
facility, customer, distance = [], [], []
for key, value in d.items():
samples = dict_to_values(key, value)
facility.extend(samples[0])
customer.extend(samples[1])
distance.extend(samples[2])
df = pd.DataFrame({'facility': facility, 'customer': customer, 'distance': distance})
print(df)
Output:
facility customer distance
0 Fac-1 1 4
1 Fac-1 2 5
2 Fac-1 3 6
3 Fac-1 4 8
4 Fac-1 5 10
5 Fac-2 1 6
6 Fac-2 2 4
7 Fac-2 3 3
8 Fac-2 4 5
9 Fac-2 5 8
10 Fac-3 1 9
11 Fac-3 2 7
12 Fac-3 3 4
13 Fac-3 4 3
14 Fac-3 5 4