将最长字段放在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
另一答案

单向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)

以上是关于将最长字段放在dataframe列中的主要内容,如果未能解决你的问题,请参考以下文章

将列表转换为 DataFrame 并在 DataFrame 列中拆分嵌套字典 - Python 3.6

Spark SQL读写方法

将函数应用于 Pandas.DataFrame 中两列的每个组合的更好方法

使用 UDF 从 PySpark Dataframe 解析嵌套的 XML 字段

如何创建文本字段、调整它们的大小并将它们放在报表的列中的示例

比较两个不同列中相同字段的值