Pandas 是否从数据帧中获取3列的最大值?
我有一个包含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',
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