Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pandas中递增列标题_Python_Pandas - Fatal编程技术网

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