पंडों डेटाफ्रेम को पदानुक्रमित शब्दकोश में कैसे परिवर्तित करें


16

मेरे पास निम्नलिखित पांडा डेटाफ्रेम हैं:

df1 = pd.DataFrame({'date': [200101,200101,200101,200101,200102,200102,200102,200102],'blockcount': [1,1,2,2,1,1,2,2],'reactiontime': [350,400,200,250,100,300,450,400]})

मैं एक पदानुक्रमित शब्दकोश बनाने की कोशिश कर रहा हूं, सूचियों के रूप में एम्बेडेड शब्दकोश के मूल्यों के साथ, जो इस तरह दिखता है:

{200101: {1:[350, 400], 2:[200, 250]}, 200102: {1:[100, 300], 2:[450, 400]}}

यह मैं कैसे करूंगा? निकटतम मैं इस कोड का उपयोग कर रहा हूं:

df1.set_index('date').groupby(level='date').apply(lambda x: x.set_index('blockcount').squeeze().to_dict()).to_dict()

कौन सा रिटर्न:

{200101: {1: 400, 2: 250}, 200102: {1: 300, 2: 400}}

जवाबों:


20

यहाँ एक और तरीका है pivot_table:

d = df1.pivot_table(index='blockcount',columns='date',
     values='reactiontime',aggfunc=list).to_dict()

print(d)

{200101: {1: [350, 400], 2: [200, 250]},
 200102: {1: [100, 300], 2: [450, 400]}}

7

IIUC

    df1.groupby(['date','blockcount']).reactiontime.agg(list).unstack(0).to_dict()
{200101: {1: [350, 400], 2: [200, 250]}, 200102: {1: [100, 300], 2: [450, 400]}}

5

आप निम्न कार्य कर सकते हैं,

df2 = df1.groupby(['date', 'blockcount']).agg(lambda x: pd.Series(x).tolist())

# Formatting the result to the correct format
dct = {}
for k, v in df2["reactiontime"].items():
  if k[0] not in dct: 
    dct[k[0]] = {}
  dct[k[0]].update({k[1]: v})

जो पैदा करता है,

>>> {200101: {1: [350, 400], 2: [200, 250]}, 200102: {1: [100, 300], 2: [450, 400]}}

dct परिणाम आप की जरूरत है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.