Agregate数据帧列

2024-10-04 01:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个日期框,看起来像这样:

d = {'text':['A','B'],'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
df

  text col1 col2
0 A    1    3
1 B    2    3

我想计算“平均值”列,并在标题“文本”上方添加标签“速率”:

  'mean:'  meanofcol1    meanofcol2
  text      col1          col2
0 A         1             3
1 B         2             3

谢谢你的帮助


Tags: text文本标题dataframedfdata速率标签
1条回答
网友
1楼 · 发布于 2024-10-04 01:30:39

仅按^{}、计数mean^{}与另一个dictionary选择数字列:

d = {**df.select_dtypes(np.number).mean().to_dict(), **{'text': 'rate: '}}
print (d)
{'col1': 1.5, 'col2': 3.5, 'text': 'rate: '}

然后用^{}^{}创建MultiIndex

df.columns = pd.MultiIndex.from_arrays([df.columns.map(d.get), df.columns])
#alternative
#df.columns = [df.columns.map(d.get), df.columns] 
print (df)
  rate:   1.5  3.5
    text col1 col2
0      A    1    3
1      B    2    4

如果所有数字列都可以不带第一个,则此替代方法-将文本列转换为索引,创建MultiIndex和最后一个^{}

df = df.set_index('text')
d = df.select_dtypes(np.number).mean()
print (d)
col1    1.5
col2    3.5
dtype: float64

df.columns = pd.MultiIndex.from_arrays([df.columns.map(d.get), df.columns])
#pandas 0.24.1+
df = df.rename_axis(columns=('rate: ','text'), index=None)
#pandas bellow
#df = df.rename_axis(('rate: ','text'), axis=1).rename_axis(None)
print (df)
rate:   1.5  3.5
text   col1 col2
A         1    3
B         2    4

此外text还应动态分配:

df = df.rename_axis(columns=('rate: ', df.index.name), index=None)
#df = df.rename_axis(('rate: ', df.index.name), axis=1).rename_axis(None)

相关问题 更多 >