Pandas 重塑数据帧年份变量

Pandas 重塑数据帧年份变量,pandas,dataframe,Pandas,Dataframe,如何重塑/变换: 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 要获得: KS

如何重塑/变换:

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      
试试这个

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.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编辑放置列级别


看起来您只是在查看值为真的地方。如果是的话

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)

看起来您只是在查看值为真的地方。如果是的话

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)

有两个简单的答案涉及到用序列重建数据帧

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

有两个简单的答案涉及到用序列重建数据帧

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

有更简单的答案更有效。请看我的答案:有更简单的答案更有效。看我的