将最长字段放入数据框列

时间:2019-04-15 22:03:54

标签: python python-3.x pandas

我有一个三列的pandas数据框,都是文本。如何创建一个仅包含三列中最长的文本的新列?我将长度定义为简单的字符数。

3 个答案:

答案 0 :(得分:3)

我真的不确定效率如何,但是,您可以对DF中的所有内容使用.applymap(len)-在列轴上获取最大索引,然后在其上使用.lookup(...),例如:

开始于:

df = pd.DataFrame({ 
     'a': ['a', 'bb', 'c'], 
     'b': ['aaa', 'bb', 'cc'], 
     'c': ['a', 'bbb', 'ccc'] 
})

您可以这样做:

mx = df.applymap(len).idxmax(axis=1)

哪个会给您从每一行中提取的相关列:

0    b
1    c
2    c
dtype: object

然后,您在原始DF中查找这些内容,并作为新列分配回DF,例如:

df['d'] = df.lookup(mx.index, mx.values)

为您提供最终的DF:

    a    b    c    d
0   a  aaa    a  aaa
1  bb   bb  bbb  bbb
2   c   cc  ccc  ccc

答案 1 :(得分:3)

使用来自@JonClement's answer的数据。 。 。另一个选择是python的<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>函数的逐行应用:

doc.Paragraphs(paragraphIndex).Range.Sentences(1).Font.Bold = True

答案 2 :(得分:2)

argmaxnumpy的单向vectorize

df.columns[np.vectorize(len)(df.values).argmax(1)]
Out[574]: Index(['b', 'c', 'c'], dtype='object')

df.values[np.arange(len(df)),np.vectorize(len)(df.values).argmax(1)]
Out[575]: array(['aaa', 'bbb', 'ccc'], dtype=object)