Python 将列添加到包含每行最大值和相应列名的数据框中
我的系统 Windows 7,64位 python 3.5.1 挑战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
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