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
有更简单的答案更有效。请看我的答案:有更简单的答案更有效。看我的