मैं फिर से आकार/रूपांतरित कैसे करूं:

df = pd.DataFrame({'Year':[2014,2015,2014,2015],'KS4':[True, True, False, False], 'KS5':[False, False, True, False]})

     KS4    KS5  Year
0   True  False  2014
1   True  False  2015
2  False   True  2014
3  False  False  2015

लेना:

    KS4   KS5
0  2014  2014
1  2015      
2
Scott Boston 7 सितंबर 2017, 18:58

4 जवाब

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

श्रृंखला के साथ DataFrame को फिर से संगठित करने से जुड़े कुछ सरल उत्तर हैं।

df.iloc[:, :-1].apply(lambda x: pd.Series(df.Year.values[x]))

यह वही काम अधिक स्पष्ट रूप से एक लूप के साथ करता है।

pd.DataFrame({col: pd.Series(df['Year'].values[df[col]]) for col in df.columns[:-1]})

    KS4     KS5
0  2014  2014.0
1  2015     NaN
2
Ted Petrou 11 सितंबर 2017, 01:15

ऐसा लगता है कि आप केवल वही देख रहे हैं जहां मान सत्य हैं। यदि ऐसा है तो...

dd = dd.groupby(['Year'], as_index=False).sum()

dd.KS4 = dd.KS4 * dd.Year
dd.KS5 = dd.KS5 * dd.Year

dd.replace(0, '', inplace=True)
2
A.Kot 7 सितंबर 2017, 19:07

ये कोशिश करें

df.KS4=df.KS4.mul(df.Year)
df.KS5=df.KS5.mul(df.Year)

df.set_index('Year').stack().to_frame().replace({0:np.nan}).dropna()\
           .unstack().fillna('').reset_index(drop=True)
Out[159]: 
        0      
      KS4   KS5
0    2014  2014
1    2015

df.columns = df.columns.droplevel() का उपयोग करके ड्रॉप कॉलम स्तर संपादित करें

या

df=df.set_index('Year').stack().to_frame().replace({0:np.nan}).dropna()\
           .unstack().fillna('')
df.mul(df.index.values).reset_index(drop=True)

Out[183]: 
      0      
    KS4   KS5
0  2014  2015
1  2014      
2
BEN_YO 7 सितंबर 2017, 20:18
f = lambda d: d.mul(d.index.to_series().astype(str), 0)
df.groupby('Year').any().pipe(f).reset_index(drop=True)

    KS4   KS5
0  2014  2014
1  2015  
1
piRSquared 7 सितंबर 2017, 19:49