【发布时间】:2017-01-11 00:40:39
【问题描述】:
根据查询,我的 DF 可以有一个带有字符串的列或一个带有 NaN 的列。
例如:
ID grams Projects
0 891 4.0 NaN
1 725 9.0 NaN
或
ID grams Projects
0 890 1.0 P1, P2
1 724 1.0 P1
2 880 1.0 P1, P2
3 943 1.0 P1
4 071 1.0 P1
我可以处理其中一个,但是当我尝试创建一个通用的函数时,我失败了。最后我需要忽略 NaN,因为我将此 DF 作为 JSON 响应发送,而 NaN 给了我无效的格式。
我现在的做法是:
#When Projects is a string
df['Projects'] = _df.groupby("ID")['External_Id'].apply(lambda x: ",".join(x))
#When Projects is NaN
df['Projects'] = _df.groupby("ID")['External_Id'].apply(lambda x: "")
我尝试使用fillna() 并检查 'x' 的 dtype,但它总是返回为 object,所以我无法检查它是否是 str 或 NaN
此外,“项目”列的结果不应允许重复。某些按 ID 分组的行包含重要信息,这些信息将被汇总(“克”),但“External_Id”不应出现多次。 例如:
ID grams External_Id
0 890 1.0 P1
1 890 1.0 P2
2 890 1.0 P2
3 724 1.0 P1
4 724 1.0 P1
结果应该是
ID grams Projects
0 890 3.0 P1, P2
1 724 2.0 P1
不是
ID grams Projects
0 890 1.0 P1, P2, P2
1 724 1.0 P1, P1
【问题讨论】:
-
如果我理解正确,您需要检测列是否有 NaN?
-
是的,你是对的。如果列有 NaN,我想返回一个空字符串 (""),因为它在 JSON 对象中无效。
-
“忽略重复项”是什么意思?它在标题中,但似乎从问题的正文中消失了。
-
你说得对,我忘了解释。我会添加到正文中。我基本上有一些具有相同 ID 和相同项目的行。行上的其他信息对于计数/分析很重要,但例如,项目在连接时应该只出现一次,而不是“P1,P1,P1 ...”。
-
所有的 NaN 是否都与同一个项目有关?如果你能举个输入数据的例子就好了
标签: python python-3.x pandas nan missing-data