如何使用带有 pandas apply 的 lambda 函数遍历数组
How to iterate over an array using a lambda function with pandas apply
我有以下数据集:
0 1 2
0 2.0 2.0 4
0 1.0 1.0 2
0 1.0 1.0 3
3 1.0 1.0 5
4 1.0 1.0 2
5 1.0 NaN 1
6 NaN 1.0 1
我想要做的是插入一个遍历每一行的新列,如果有 NaN 则给它一个 0,如果没有则复制列“2”中的值以获取此值:
0 1 2 3
0 2.0 2.0 4 4
0 1.0 1.0 2 2
0 1.0 1.0 3 3
3 1.0 1.0 5 5
4 1.0 1.0 2 2
5 1.0 NaN 1 0
6 NaN 1.0 1 0
以下代码是我目前所拥有的代码,它工作正常但不会遍历“2”列的值。
df.isna().sum(axis=1).apply(lambda x: df[2].iloc[x] if x==0 else 0)
如果我使用 df.iloc[x] 我得到
0 4
1 4
2 4
3 4
4 4
5 0
6 0
如何遍历“2”列?
使用 np.where
和 isna
和 any
尝试以下代码:
>>> df['3'] = np.where(df[['0', '1']].isna().any(1), 0, df['2'])
>>> df
0 1 2 3
0 2.0 2.0 4 4
0 1.0 1.0 2 2
0 1.0 1.0 3 3
3 1.0 1.0 5 5
4 1.0 1.0 2 2
5 1.0 NaN 1 0
6 NaN 1.0 1 0
>>>
我有以下数据集:
0 1 2
0 2.0 2.0 4
0 1.0 1.0 2
0 1.0 1.0 3
3 1.0 1.0 5
4 1.0 1.0 2
5 1.0 NaN 1
6 NaN 1.0 1
我想要做的是插入一个遍历每一行的新列,如果有 NaN 则给它一个 0,如果没有则复制列“2”中的值以获取此值:
0 1 2 3
0 2.0 2.0 4 4
0 1.0 1.0 2 2
0 1.0 1.0 3 3
3 1.0 1.0 5 5
4 1.0 1.0 2 2
5 1.0 NaN 1 0
6 NaN 1.0 1 0
以下代码是我目前所拥有的代码,它工作正常但不会遍历“2”列的值。
df.isna().sum(axis=1).apply(lambda x: df[2].iloc[x] if x==0 else 0)
如果我使用 df.iloc[x] 我得到
0 4
1 4
2 4
3 4
4 4
5 0
6 0
如何遍历“2”列?
使用 np.where
和 isna
和 any
尝试以下代码:
>>> df['3'] = np.where(df[['0', '1']].isna().any(1), 0, df['2'])
>>> df
0 1 2 3
0 2.0 2.0 4 4
0 1.0 1.0 2 2
0 1.0 1.0 3 3
3 1.0 1.0 5 5
4 1.0 1.0 2 2
5 1.0 NaN 1 0
6 NaN 1.0 1 0
>>>