我有一个三列的pandas数据框,都是文本。如何创建一个仅包含三列中最长的文本的新列?我将长度定义为简单的字符数。
答案 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)
argmax
与numpy
的单向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)