熊猫:连接列加总一些行并表示其他行

时间:2017-10-23 16:54:16

标签: python-2.7 pandas

这是我的数据框:

import matplotlib.pyplot as plt
import pandas as pd
mydic = {'time': {'Type1': 15, 'Type2': 47, 'Type3': 23, 'Type4': 45}, 'count': {'Type1': 26, 'Type2': 39, 'Type3': 34, 'Type4': 67}}
df = pd.DataFrame.from_dict(mydic, orient='index')
df.head()

DF:

        Type4   Type1   Type3   Type2
count   67      26      34      39
time    45      15      23      47

我需要根据字典加入一些列:总结一些行,但计算其他行的平均值。我可以做sum()或mean(),但不知道如何一次性完成这两项操作而不为'count'和'time'创建不同的数据帧。请帮帮忙?

我的代码:

def merge(df):
    types = {'Type1&2': ['Type1', 'Type2'], 'Type3&4': ['Type3', 'Type4']}
    columns_to_drop = ['Type1', 'Type2', 'Type3', 'Type4']
    for t in types:
#        df[t] = df[types[t]].sum(axis=1)
        df[t] = df[types[t]].mean(axis=1)
    df.drop(columns_to_drop, axis=1, inplace=True) # Drop merged columns

merge(df)
df.head()

2 个答案:

答案 0 :(得分:2)

您似乎需要按locmeansum选择行:

def merge(df):
    types = {'Type1&2': ['Type1', 'Type2'], 'Type3&4': ['Type3', 'Type4']}
    columns_to_drop = ['Type1', 'Type2', 'Type3', 'Type4']
    for t in types:
        df.loc['count', t] = df.loc['count', types[t]].sum()
        df.loc['time', t] = df.loc['time', types[t]].mean()
    df.drop(columns_to_drop, axis=1, inplace=True) # Drop merged columns
    return df

df1 = merge(df)
print (df1)

       Type1&2  Type3&4
count     65.0    101.0
time      31.0     34.0

答案 1 :(得分:1)

或者试试这个?

d = dict(Type1='Type12', Type2='Type12', Type3='Type34', Type4='Type34')
df1=df.T.groupby(d).agg({'count':'sum','time':'mean'}).T
df1
Out[1004]: 
       Type12  Type34
count      65     101
time       31      34