【发布时间】:2019-11-14 21:22:51
【问题描述】:
我有一个函数来计算最大频率项及其速率,我想将这些值设置为 数据框中两个不同列的 NaN_values: (注:每一列都有其他值(non_NaN值),我要填na)
Id numbers max_frq rate
1 1,1,1,2,3 NaN NaN
2 1,6,6,6 NaN NaN
3 7,7 NaN NaN
预期:
id numbers max_frq rate
1 1,1,1,2,3 1 0.6
2 1,6,6,6 6 0.75
3 7,7 7 1.0
这是我的代码,它通过重复值(max_no 的第一个值,rate 的第一个值)填充列中的所有 NaN 值。 如何通过关联值填充每个 Id 行?
def max_rate(Id) # Id is a list
num = pd.Series(numbers).value_counts()
max_no = num.max()
sum_no = num.sum()
rate = max_no / sum_no
return max_no, rate_no
for Id in (df["Id"].unique()):
max_no, rate_no = max_rate(Id)
df.max_frq = df.max_frq.fillna(max_no)
df.rate = df.rate.fillna(rate_no)
我还检查了this similar question,但我不明白如何使用 lambda 和 series 以及在哪里放置 (fillna) 条件,我编码了这个
for Id in (df["Id"].unique()):
g = lambda x: pd.Series(max_rate(x))
df[['max_frq', 'rate']] = df.apply(g, axis=1)
并得到错误: ('具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()', '发生在索引 50')
【问题讨论】:
-
为什么最后一列的费率为 0.5?那不应该是1吗?
-
可能,首先,您不应该将数字列表存储在 pandas 数据框中,四个目的和目的,这是低效的。对
Id和row in Id使用多级索引或两列。 -
@thushv89 你是对的,它是 (1.0),很抱歉造成混淆。
-
@MaxNoe 该列表是之前操作的输出,数字用于说明,您能否举例说明您的想法。