添加包含现有列名称的新列

时间:2016-07-14 14:11:06

标签: python pandas max

我处理的数据框如下:

    FID           geometry                                       Code   w1  w2
0   12776   POLYGON ((-1.350000000000025 53.61540813717482...   12776   0   1
1   13892   POLYGON ((6.749999999999988 52.11964001623148,...   13892   1   0
2   14942   POLYGON ((-3.058896639907732e-14 51.3958198431...   14942   1   1
3   18964   POLYGON ((8.549999999999974 45.26941059233587,...   18964   0   1
4   19863   POLYGON ((-0.4500000000000305 44.6337746953077...   19863   0   1

我的目标是添加一个标记为' Max'的列,我将写入哪个w(w1,w2)的频率更高。

到目前为止,我只管理了添加一个列,其中显示的是最高频率,而不是显示的列的名称。

所需的输出将是这样的:

    FID     geometry     Code   w1  w2   Max
0   12776   ...         12776   0   1    w2
1   13892   ...         13892   1   0    w1
2   14942   ...         14942   1   1    0
3   18964   ...         18964   0   1    w2
4   19863   ...         19863   0   1    w2

此外,我想在频率相同的情况下(如果可能的话)同时填充零。

任何帮助将不胜感激! : - )

2 个答案:

答案 0 :(得分:5)

如果np.where相等0,请idxmax(1)选择df['max'] = np.where(df.w1 == df.w2, 0, df[['w1', 'w2']].idxmax(1)) df FID geometry Code w1 w2 Max 0 12776 ... 12776 0 1 w2 1 13892 ... 13892 1 0 w1 2 14942 ... 14942 1 1 0 3 18964 ... 18964 0 1 w2 4 19863 ... 19863 0 1 w2

{{1}}

答案 1 :(得分:4)

这样的事情应该有效:

(df['w1'] == df['w2']).map({True: 0}).fillna(df[['w1', 'w2']].idxmax(axis=1))
Out[26]: 
0    w2
1    w1
2     0
3    w2
4    w2
dtype: object

工作原理:

主要部分是idxmax:

df[['w1', 'w2']].idxmax(axis=1)
Out[27]: 
0    w2
1    w1
2    w1
3    w2
4    w2
dtype: object

首先选择相关列,然后返回最大值的索引(对于列,轴= 1)。但是,如果是关系,它会返回第一个索引。

(df['w1'] == df['w2']).map({True: 0})w1==w2时填充0系列。剩余的值是NaN。所以这些都充满了idxmax值。

注意:np.where绝对是更合乎逻辑(也可能更快)的选择。我只想尝试其他替代方案。

相关问题