【问题标题】:How to add Multilevel Columns and create new column?如何添加多级列并创建新列?
【发布时间】:2022-07-19 00:40:27
【问题描述】:

我正在尝试在我的数据框中创建一个“总计”列

idx = pd.MultiIndex.from_product([['Room 1','Room 2', 'Room 3'],['on','off']])
df = pd.DataFrame([[1,4,3,6,5,15], [3,2,1,5,1,7]], columns=idx)

我的数据框

    Room 1  Room 2  Room 3
    on  off on  off on  off
0   1   4   3   6   5   15
1   3   2   1   5   1   7

对于每个房间,我想创建一个总列,然后创建一个 on% 列。

我尝试了以下方法,但是它不起作用。

df.loc[:, slice(None), "total" ] = df.xs('on', axis=1,level=1) + df.xs('off', axis=1,level=1) 

【问题讨论】:

  • 遍历每个房间并添加总列?
  • 我想了想,我想知道是否有办法在没有 for 循环的情况下做到这一点。如果一切都失败了,我可以试试。感谢您的建议!

标签: pandas dataframe


【解决方案1】:

Oof 这是一个粗略的,但如果你想避免循环,你可以这样做。值得注意的是,它重新定义了您的 df 两次,因为我需要总列。很抱歉,但这是我能做的最好的了。

df = pd.concat([y.assign(**{'Total {0}'.format(x+1): y.iloc[:,0] + y.iloc[:,1]})for x , y in df.groupby(np.arange(df.shape[1])//2,axis=1)],axis=1)


df = pd.concat([y.assign(**{'Percentage_Total{0}'.format(x+1): (y.iloc[:,0] / y.iloc[:,2])*100})for x , y in df.groupby(np.arange(df.shape[1])//3,axis=1)],axis=1)
print(df)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多