Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 将列添加到包含每行最大值和相应列名的数据框中_Python_Pandas - Fatal编程技术网

Python 将列添加到包含每行最大值和相应列名的数据框中

Python 将列添加到包含每行最大值和相应列名的数据框中,python,pandas,Python,Pandas,我的系统 Windows 7,64位 python 3.5.1 挑战 In[1]: # Make pandas dataframe df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]}) # Calculate max my_series = df.max(numeric_only=True, axis = 1) my_series.name = "maxval" # Include maxval in

我的系统

Windows 7,64位

python 3.5.1

挑战

In[1]:
# Make pandas dataframe
df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]})

# Calculate max 
my_series = df.max(numeric_only=True, axis = 1)
my_series.name = "maxval"

# Include maxval in df
df = df.join(my_series)
df        

Out[1]:
    a  b  c  maxval
0   1  0  0  1
1   0  0  0  0
2   0  1  0  1
3   1  0  0  1
4   3  1  0  3
我有一个熊猫数据框,我想知道每行的最大值,并将该信息作为一个新列附加。我还想知道最大值所在列的名称。我想在现有数据框中添加另一列,其中包含可以找到最大值的列的名称

一个类似的问题已经被问到并回答了

可复制示例

In[1]:
# Make pandas dataframe
df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]})

# Calculate max 
my_series = df.max(numeric_only=True, axis = 1)
my_series.name = "maxval"

# Include maxval in df
df = df.join(my_series)
df        

Out[1]:
    a  b  c  maxval
0   1  0  0  1
1   0  0  0  0
2   0  1  0  1
3   1  0  0  1
4   3  1  0  3
到目前为止还不错。现在对于将另一列添加到包含列名称的现有数据框中部分:

In[2]:
?
?
?


# This is what I'd like to accomplish:
Out[2]:
        a  b  c  maxval maxcol
    0   1  0  0  1      a
    1   0  0  0  0      a,b,c       
    2   0  1  0  1      b
    3   1  0  0  1      a
    4   3  1  0  3      a

请注意,如果多个列包含相同的最大值,我希望返回所有列名。另外请注意,maxval列未包含在maxcol中,因为这没有多大意义。如果有人对此感兴趣,请提前感谢。

您可以使用
eq
axis=0
将df与
maxval
进行比较,然后使用
apply
lambda
生成一个布尔掩码来屏蔽列并
连接它们:

In [183]:
df['maxcol'] = df.ix[:,:'c'].eq(df['maxval'], axis=0).apply(lambda x: ','.join(df.columns[:3][x==x.max()]),axis=1)
df

Out[183]:
   a  b  c  maxval maxcol
0  1  0  0       1      a
1  0  0  0       0  a,b,c
2  0  1  0       1      b
3  1  0  0       1      a
4  3  1  0       3      a