我有一个数据框
import pandas as pd
import numpy as np
df1 = pd.DataFrame.from_dict(
{"col1": [0, 0, 0, 0, 0],
"col2": ["15", [10,15,20], "30", [20, 25], np.nan]})
看起来像这样
| 列1|列2|
| - ------|- ------|
| 无|"十五"|
| 无|[十、十五、二十]|
| 无|"三十"|
| 无|[二十、二十五]|
| 无|钠氮|
对于col2,我需要每行的最大值,例如第一行为15,第二行为20,这样我就得到了以下 Dataframe :
df2 = pd.DataFrame.from_dict(
{"col1": [0, 0, 0, 0, 0],
"col2": [15, 20, 30, 25, np.nan]})
应该是这样的
| 列1|列2|
| - ------|- ------|
| 无|十五|
| 无|二十个|
| 无|三十|
| 无|二十五|
| 无|钠氮|
我尝试使用一个for循环来检查每一行的col2类型,然后将str转换为int,将max()应用于列表,并保持nan的列表不变,但没有成功。这是我尝试的方法(尽管我建议忽略我的尝试):
col = df1["col2"]
coltypes = []
for i in col:
#get type of each row
coltype = type(i)
coltypes.append(coltype)
df1["coltypes"] = coltypes
#assign value to col3 based on type
df1["col3"] = np.where(df1["coltypes"] == str, df1["col1"].astype(int),
np.where(df1["coltypes"] == list, max(df1["coltypes"]), np.nan))
给出以下错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-b8eb266d5519> in <module>
9
10 df1["col3"] = np.where(df1["coltypes"] == str, df1["col1"].astype(int),
---> 11 np.where(df1["coltypes"] == list, max(df1["coltypes"]), np.nan))
TypeError: '>' not supported between instances of 'type' and 'type'
4条答案
按热度按时间brccelvz1#
让我们先尝试
explode
,然后再尝试groupby
和max
i5desfxk2#
另一种可能更容易理解的方法是使用
apply()
和一个简单的函数,该函数根据类型返回max。输出为:
50few1ms3#
我想你想得到这个答案......
zfciruhq4#
以下是另外两个选项:
或
输出: