栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果所有行的列中只有一个值,则在Pandas数据框中折叠行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果所有行的列中只有一个值,则在Pandas数据框中折叠行

选项0
超级简单

pd.concat([pd.Series(df[c].dropna().values, name=c) for c in df], axis=1)   col1  col2  col3   col4   col5 col60  ABC1  15.0  24RA  Large  345.0   US

每列可以处理多个值吗?
我们当然可以!

df.loc[2, 'col3'] = 'Test'   col1  col2  col3   col4   col5 col60  ABC1  15.0  Test  Large  345.0   US1   NaN   NaN  24RA    NaN    NaN  NaN

选项1
使用

np.where
像外科医生一样的通用解决方案

v = df.valuesi, j = np.where(np.isnan(v))s = pd.Series(v[i, j], df.columns[j])c = s.groupby(level=0).cumcount()s.index = [c, s.index]s.unstack(fill_value='-')  # <-- don't fill to get NaN   col1  col2  col3   col4 col5 col60  ABC1  15.0  24RA  Large  345   US

df.loc[2, 'col3'] = 'Test'v = df.valuesi, j = np.where(np.isnan(v))s = pd.Series(v[i, j], df.columns[j])c = s.groupby(level=0).cumcount()s.index = [c, s.index]s.unstack(fill_value='-')  # <-- don't fill to get NaN   col1  col2  col3   col4 col5 col60  ABC1  15.0  Test  Large  345   US1     -     -  24RA      -    -    -

选项2

mask
制作null然后
stack
摆脱它们

否则我们可以

# This should work even if `'-'` are NaN# but you can skip the `.mask(df == '-')`s = df.mask(df == '-').stack().reset_index(0, drop=True)c = s.groupby(level=0).cumcount()s.index = [c, s.index]s.unstack(fill_value='-')   col1  col2  col3   col4 col5 col60  ABC1  15.0  Test  Large  345   US1     -     -  24RA      -    -    -


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号