【发布时间】:2020-11-23 19:48:51
【问题描述】:
用例如下:如果在 Pandas Dataframe 中,有几列大于零,我想创建一个值为1 的新列,如果相同的列是负数,我希望设置-1 ,否则我希望设置0。
现在,我想扩展以前的。假设我想检查4 列的条件,但如果其中三个条件成立,我仍然希望分配相应的值。下面是一个例子。
import pandas as pd
import numpy as np
df = pd.DataFrame(
[
[1, 2, 3, 4, 5],
[-1, -2, -3, -4, -5],
[1, 2, -1, -2, -3],
[1, 2, 3, -1, -2]
]
, columns=list('ABCDE'))
def f(df):
dst = pd.Series(np.zeros(df.shape[0], dtype=int))
dst[(df < 0).all(1)] = -1
dst[(df > 0).all(1)] = 1
return dst
columns = ['A', 'B', 'C', 'D']
df['dst'] = f(df[columns])
上面的代码将返回以下DataFrame:
A B C D E dst
0 1 2 3 4 5 1
1 -1 -2 -3 -4 -5 -1
2 1 2 -1 -2 -3 0
3 1 2 3 -1 -2 0
预期的行为是什么:
- 对于行
0,dst应该是1,因为A到D保持肯定条件。 - 对于行
1,dst应该是-1,因为A到D保持否定条件。 - 对于行
2,dst应为0,因为A到D不满足任何条件。 - 对于行
3,dst应为1,因为A到C持有肯定条件,只有D不持有。
【问题讨论】:
-
示例输入和预期输出会使其更加清晰。您可以将它们添加到问题中吗?
标签: python pandas numpy dataframe