Python 在pandas中递增列标题
你能帮我解决以下问题吗 从下面给出的初始数据框中,我想基于如下列条件创建一个新的数据框:Python 在pandas中递增列标题,python,pandas,Python,Pandas,你能帮我解决以下问题吗 从下面给出的初始数据框中,我想基于如下列条件创建一个新的数据框: 如果均值>中位数,则A加1,B加-1,如果均值
如果均值>中位数,则A加1,B加-1,如果均值<中位数,则A加-1,B加1,否则A和B加0。
初始数据帧:
A/B A/C A/D B/C B/D C/D
0 0.75 0.61 1.07 0.82 1.43 1.75
1 1.21 10.88 2.17 9 1.8 0.2
2 0.95 0.85 1.97 0.9 2.08 2.32
3 0.47 0.47 0.91 1 1.94 1.94
最终输出数据框应包括所有元素的总分,如下所示: 提前感谢您。使用:
#count mean and median
df1 = df.agg(['mean','median']).round(2)
#difference in sample data so set 0.85
df1.loc['mean', 'A/B'] = 0.85
首先将数据帧转置,并通过以下方式将索引
拆分为多索引
:
然后将mean
与median
进行比较,并在以下位置设置新的两列:
最后对两个索引使用sum
,并将其连接在一起:
df2 = (pd.concat([df1.a.droplevel(1), df1.b.droplevel(0)])
.sum(level=0)
.rename_axis('Element')
.reset_index(name='Total Score'))
print (df2)
Element Total Score
0 A 2
1 B 0
2 C -3
3 D 1
您所说的
将1添加到A和-1添加到B是什么意思?其中列A
和B
?嗨,Mayank,A和B在A/B格式的列标题中。因此,根据列条件,应分别为它们指定一个点。谢谢。嗨,耶兹雷尔,看来你的代码是完美的,因为你得到了输出。但是,我得到了“KeyError:“[Index(['a','b'],dtype='object')]中没有一个在[columns].”中。我检查了是否有任何不一致之处,但除此之外所有都正常工作。请帮助我解决这个问题。谢谢。@Arya-对你来说工作得很好df1['a','b']=np select([m1,m2],[1,-1],[0,0]],[-1,1]))
?如果没有,你的熊猫版本是什么?嗨,杰兹雷尔,我正在使用熊猫版本-'1.0.5'。谢谢。@Arya-工作正常df1['a','b']]=np。选择([m1,m2],[1,-1],[0,0]],[-1,1])
?现在它工作正常了。再次感谢你。
m1 = df1['mean'].gt(df1['median']).to_numpy()[:, None]
m2 = df1['mean'].eq(df1['median']).to_numpy()[:, None]
df1 = pd.DataFrame(np.select([m1, m2], [[1,-1], [0,0]], [-1, 1]),
index=df1.index,
columns=['a','b'])
print (df1)
a b
A B 0 0
C 1 -1
D 1 -1
B C 1 -1
D -1 1
C D -1 1
df2 = (pd.concat([df1.a.droplevel(1), df1.b.droplevel(0)])
.sum(level=0)
.rename_axis('Element')
.reset_index(name='Total Score'))
print (df2)
Element Total Score
0 A 2
1 B 0
2 C -3
3 D 1