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
我有这个
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