Pandas 是否从数据帧中获取3列的最大值?

Pandas 是否从数据帧中获取3列的最大值?,pandas,dataframe,max,Pandas,Dataframe,Max,我有一个包含3列的熊猫数据框架: c={'a': [['US']],'b': [['US']], 'c': [['US','BE']]} df = pd.DataFrame(c, columns = ['a','b','c']) 现在我需要这3列的最大值 我试过: df['max_val'] = df[['a','b','c']].max(axis=1) 结果是Nan而不是预期的输出:US 如何获取这3列的最大值?(如果其中一个包含Nan),该怎么办?使用: c={'a': [['US',

我有一个包含3列的熊猫数据框架:

c={'a': [['US']],'b': [['US']], 'c': [['US','BE']]}
df = pd.DataFrame(c, columns = ['a','b','c'])
现在我需要这3列的最大值

我试过:

df['max_val'] = df[['a','b','c']].max(axis=1)
结果是
Nan
而不是预期的输出:
US

如何获取这3列的最大值?(如果其中一个包含
Nan
),该怎么办?

使用:

c={'a': [['US', 'BE'],['US']],'b': [['US'],['US']], 'c': [['US','BE'],['US','BE']]}
df = pd.DataFrame(c, columns = ['a','b','c'])
                  
            
from collections import Counter
df = df[['a','b','c']].apply(lambda x: list(Counter(map(tuple, x)).most_common()[0][0]), 1)
print (df)
0    [US, BE]
1        [US]
dtype: object

正如我所看到的,您有一些元素作为列表类型,因此我认为下面提到的代码可以很好地工作

  • 首先,将所有值追加到数组中
  • 然后,从该数组中查找最常出现的元素

  • 这将给您一个您想要的答案。

    如果它如@Erfan所述,则是一行中最常见的值,然后是
    .agg()
    模式

    df.agg('mode', axis=1)
             0
    0  [US, BE]
    1      [US]
    

    当数据是列表时,不能使用
    pandas.mode()
    。因为列表对象是不可损坏的,
    mode()
    函数将无法工作。
    解决方案是将数据帧行的元素转换为字符串,然后使用
    pandas.mode()

    选中此项:

    >>> import pandas as pd
    >>> c = {'a': [['US','BE']],'b': [['US']], 'c': [['US','BE']]}
    >>> df = pd.DataFrame(c, columns = ['a','b','c'])
    >>> x = df.iloc[0].apply(lambda x: str(x))
    >>> x.mode()
    # Answer:
    0    ['US', 'BE']
    dtype: object
    >>> d = {'a': [['US']],'b': [['US']], 'c': [['US','BE']]}
    >>> df2 = pd.DataFrame(d, columns = ['a','b','c'])
    >>> z =  df.iloc[0].apply(lambda z: str(z))
    >>> z.mode()
    # Answer:
    0    ['US']
    dtype: object
    

    “最大值”是指所有3列中出现最多的值吗?@Junkrat是的,没错(我希望结果是
    US
    。数据帧不是设计用来处理每个单元格中的列表的,你能通过以另一种格式获取数据来解决这个问题吗?这样我们可以应用pandas/numpy提供的更优化的方法,而不是为循环编写。我认为非常接近。如果我更改数据帧
    c={'a':['US','BE']],'b':[['US']],c:['US','BE']}
    我希望最大值为['US','BE']@JohnDoe-hmmm,对不起,我不明白。为什么它是最大值?最大值是指在所有3列中出现最多的值。他基本上想要出现最多的列表。所有列表中出现最多的值(好像只有一个列表)它可以是一个像
    [US]
    或多个像
    ['US','be']
    我的最终数据框包含的不止这三列。我只列出了3个问题。我认为它也可以在多列中工作,否则你可以在最后一行中使用print(b.most_common()[0][0])
    >>> import pandas as pd
    >>> c = {'a': [['US','BE']],'b': [['US']], 'c': [['US','BE']]}
    >>> df = pd.DataFrame(c, columns = ['a','b','c'])
    >>> x = df.iloc[0].apply(lambda x: str(x))
    >>> x.mode()
    # Answer:
    0    ['US', 'BE']
    dtype: object
    >>> d = {'a': [['US']],'b': [['US']], 'c': [['US','BE']]}
    >>> df2 = pd.DataFrame(d, columns = ['a','b','c'])
    >>> z =  df.iloc[0].apply(lambda z: str(z))
    >>> z.mode()
    # Answer:
    0    ['US']
    dtype: object