将最长字段放在dataframe列中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将最长字段放在dataframe列中相关的知识,希望对你有一定的参考价值。
我有一个包含三列的pandas数据框,都是文本。如何创建仅包含三列中最长列的文本的新列?我将长度定义为简单的字符数。
答案
我真的不确定它有多高效,但是,你可以使用.applymap(len)
来处理DF中的所有内容 - 在列轴上获取最大索引,然后在其上使用.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
另一答案
使用来自@JonClement's answer的数据。 。 。另一种选择是python的max
函数的行式应用:
df
a b c
0 a aaa a
1 bb bb bbb
2 c cc ccc
df['d'] = df.apply(max, key=len, axis=1)
df
a b c d
0 a aaa a aaa
1 bb bb bbb bbb
2 c cc ccc ccc
另一答案
单向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)
以上是关于将最长字段放在dataframe列中的主要内容,如果未能解决你的问题,请参考以下文章
将列表转换为 DataFrame 并在 DataFrame 列中拆分嵌套字典 - Python 3.6
将函数应用于 Pandas.DataFrame 中两列的每个组合的更好方法
使用 UDF 从 PySpark Dataframe 解析嵌套的 XML 字段