为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 中具有多个列的多列

Pandas 中具有多个列的多列

慕桂英4014372 2022-08-11 20:11:39
我的数据如下所示:   A   B   C   Month0  1   3   5    Jan1  1   2   3    Feb我需要:a)将“月”转换为假人df2 = pd.get_dummies(df,columns=['Month'],drop_first=True,prefix = 'm')b)将A / B / C与生成的所有假人相乘。我能想到的唯一方法是df_Feb = df2[['A','B','C']].multiply(df2['m_Feb], axis = "index")df_March...然后加入所有新创建的数据帧,这不是很方便。有没有更好的方法来解决这个问题
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

Idea是通过MultiIndex.from_product和DataFrame.reindex在s中创建的,因此可以相互创建多个:MultiIndexDataFrame


df1 = df[['A','B','C']]

df2 = pd.get_dummies(df['Month'])


mux = pd.MultiIndex.from_product([df1.columns, df2.columns])

df2 = df2.reindex(mux, axis=1, level=1)

df1 = df1.reindex(mux, axis=1, level=0)


df = df1 * df2

最后一个用于正确排序,最后一个使用 s 平展数据列:CategoricalIndexf-string


months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", 

          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]


df.columns = pd.MultiIndex.from_arrays([

    df.columns.get_level_values(0),

    pd.CategoricalIndex(df.columns.get_level_values(1),categories=months,ordered=True),

])

df = df.sort_index(axis=1)

df.columns = df.columns.map(lambda x: f'{x[0]}_{x[1]}')

print (df)


   A_Jan  A_Feb  B_Jan  B_Feb  C_Jan  C_Feb

0      1      0      3      0      5      0

1      0      1      0      2      0      3


查看完整回答
反对 回复 2022-08-11
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信