मैं निम्नलिखित तर्क के साथ डेटा df के लिए पांडा का उपयोग करके एक मैट्रिक्स उत्पन्न करना चाहता हूं:

आईडी . द्वारा समूह

निम्न: मध्य शीर्ष: अंत

दिन 1 के लिए: यदि गणना करें (यदि स्तर मध्य और अंत है और यदि दिन == 1)

दिन 2 के लिए: यदि गणना करें (यदि स्तर में मध्य और अंत है और यदि दिन == 2)

….

प्रारंभ: मध्य से नया

दिन 1 के लिए: यदि गणना करें (यदि स्तर मध्य और नया है और यदि दिन == 1)

दिन 2 के लिए: यदि गणना करें (यदि स्तर में मध्य और नया है और यदि दिन == 2) है

….

Df = pd.DataFrame({'Id':[111,111,222,333,333,444,555,555,555,666,666], 'Level': ['End', 'Mid', 'End', 'End', 'Mid', 'New', 'End','New ','मिड', 'न्यू', 'मिड'], 'दिन' : ['',3,'','',2,3,'',3,4,'',2]})

आईडी |स्तर | दिन

111 |अंत|

111 |मध्य| 3

222 |अंत|

333 |अंत|

333 |मध्य| 2

444 |नया| 3

555 |अंत|

555 |नया| 3

555 |मध्य| 4

666 |नया|

666 |मध्य| 2

मैट्रिक्स इस तरह दिखेगा:

निम्न शीर्ष दिन1 दिन2 दिन3 दिन4

मध्य अंत 0 1 1 0

मिड न्यू 0 1 0 1

नया अंत 0 0 1 0

न्यू मिड 0 0 0 1

आपको धन्यवाद! आपको धन्यवाद!

0
TylerNG 19 पद 2017, 03:29

1 उत्तर

सबसे बढ़िया उत्तर

आपके डेटाफ़्रेम से प्रारंभ करना

 # all the combination of Levels
level_combos=[c for c in itertools.combinations(df['Level'].unique().tolist(), 2)]
 # create output and fill with zeros
df_output=pd.DataFrame(0,index=level_combos,columns=range(4))

शायद बहुत कुशल नहीं है, लेकिन इसे काम करना चाहिए

for g in df.groupby(['Id']): # group by ID
    # combination of levels for this ID
    level_combos_this_id=[c for c in itertools.combinations(g[1]['Level'].unique().tolist(), 2)]


   # set to 1 the days present
    df_output.loc[level_combos_this_id,pd.to_numeric(g[1]['day']).dropna(inplace=True).values]=1

अंत में वांछित आउटपुट प्राप्त करने के लिए कॉलम का नाम बदलें

df_output.columns=['day'+str(i+1) for i in range(4)]
1
00__00__00 19 पद 2017, 10:33