这是我的数据框:
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()
答案 0 :(得分:2)
您似乎需要按loc
为mean
和sum
选择行:
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