【发布时间】:2021-10-09 03:32:28
【问题描述】:
我有以下例子df:
df1 = pd.DataFrame({'name':['Sara', 'John', 'Christine'],
'trip1 places': [np.nan , 4, 0],
'trip2 places': [1, 6, 2],
'trip3 places': [2, 0, 2],
'trip4 places': [2, 2, 2]})
df1
看起来像:
name trip1 places trip2 places trip3 places trip4 places
0 Sara NaN 1 2 2
1 John 4.0 6 0 2
2 Christine 0.0 2 2 2
我要做的是找到trips1 places、trip3 places 和trip4 places 的有效行程数。这意味着应该删除等于 0 的值并计算其他值的数量。
我的方法是将所有目标值添加到列表中并删除 0 值然后计算列表项。
df1.fillna(0, inplace=True)
然后将感兴趣的行程添加到列表中:
df1['trips'] = df1[['trip1 places','trip3 places','trip4 places']].values.tolist()
它给出:
name trip1 places trip2 places trip3 places trip4 places trips
0 Sara 0.0 1 2 2 [0.0, 2.0, 2.0]
1 John 4.0 6 0 2 [4.0, 0.0, 2.0]
2 Christine 0.0 2 2 2 [0.0, 2.0, 2.0]
现在我需要从每个列表中删除 0.0 并计算其他项目。请注意,0.0 可以在其他行中重复。
我尝试添加掩码,然后使用len 计算项目,但失败了!
m = [element for element in df1['trips'] if element != 0]
预期输出:
name trip1 places trip2 places trip3 places trip4 places effective trips # effective trips
0 Sara 0.0 1 2 2 [0.0, 2.0, 2.0] 2
1 John 4.0 6 0 2 [4.0, 0.0, 2.0] 2
2 Christine 0.0 2 2 2 [0.0, 2.0, 2.0] 2
【问题讨论】:
标签: python python-3.x pandas list dataframe