Pandas DataFrame 使用不同的函数作为行

Pandas DataFrame using different functions as rows

我有这个

df=pd.DataFrame({'A':[42.5,39.5,37.2,40,41,38,38.2,39.7],
                   'B': [13.3,12.8,12.1,12.3,13.3,12.2,12.4,12.8]})

并且我想要一个具有列 ['A'] 和 ['B'] 以及其他列的描述函数的 DataFrame,在这种情况下,我添加列 ['T'] 和 [ 'I'].

下面的

列 ['A'] 和 ['B'] 显示函数 df['A'].describe()、df['B'].describe 的结果()

这是期望的结果:

    T   I         A      B
0   F   n       8.00    8.00
1   F   avg     39.51   12.65
2   F   std     1.72    0.47
3   F   min     37.20   12.10
4   F   25%     38.15   12.27
5   F   50%     39.60   12.60
6   F   75%     40.25   19.25
7   F   max     42.50   13.30

我试过下面的代码,但没有用:

df2=pd.DataFrame({
                 'T':['F','F','F','F','F','F','F','F'],
                 'I':['n','avg','std','min','25%','50%','75%','max'],
                 'A':[df['A'].describe()],
                 'B':[df['B'].describe()],
                 })

任何帮助将不胜感激。

如果 DataFrame 的顺序 df2 与输出函数的顺序匹配,您可以对所有列使用 concat with DataFrame.describe

df2=pd.DataFrame({
                 'T':['F','F','F','F','F','F','F','F'],
                 'I':['n','avg','std','min','25%','50%','75%','max'],
                 })


df3 = pd.concat([df2, df.describe().reset_index(drop=True)], axis=1)

#if need specify some columns for describe
#df3 = pd.concat([df2, df[['A','B']].describe().reset_index(drop=True)], axis=1)
print (df3)
   T    I          A          B
0  F    n   8.000000   8.000000
1  F  avg  39.512500  12.650000
2  F  std   1.722488   0.475094
3  F  min  37.200000  12.100000
4  F  25%  38.150000  12.275000
5  F  50%  39.600000  12.600000
6  F  75%  40.250000  12.925000
7  F  max  42.500000  13.300000

或者您可以使用 rename 作为必要的索引值,然后通过 T 通过 DataFrame.insert 添加列:

df3 = df.describe().rename_axis('I').rename({'count':'n','mean':'avg'}).reset_index()
df3.insert(0, 'T', 'F')
print (df3)
   T    I          A          B
0  F    n   8.000000   8.000000
1  F  avg  39.512500  12.650000
2  F  std   1.722488   0.475094
3  F  min  37.200000  12.100000
4  F  25%  38.150000  12.275000
5  F  50%  39.600000  12.600000
6  F  75%  40.250000  12.925000
7  F  max  42.500000  13.300000