我有一个由三列组成的表格:第一个是字母,第二和第三个是数字。 我想在A列中有一个'c'时将B列除以C列。否则返回B的值。
示例:
A = np.random.choice(['c', 'p'], size = 10)
B = np.random.rand(10)
C = np.random.rand(10)
D = np.array(list(zip(A, B, C)))
D= pd.DataFrame(D, columns = ['A', 'B','C'])
D
我尝试使用np.where(D['A']== 'p', D['B']/D['C'], D['B'])
,但返回错误。
答案 0 :(得分:1)
您可以直接从字典中初始化数据框。
>>> A = np.random.choice(['c', 'p'], size = 10)
>>> B = np.random.rand(10)
>>> C = np.random.rand(10)
>>> D = pd.DataFrame({"A":A, "B":B, "C":C})
>>> D.apply(lambda row: row["C"]/row["B"] if row['A'] == "c" else row['B'], axis=1)
A B C
0 c 0.059202 0.582464
1 p 0.616223 0.918981
2 c 0.004744 0.612056
3 p 0.841413 0.501560
4 c 0.847137 0.028005
5 p 0.352703 0.043995
6 c 0.651796 0.778321
7 p 0.687776 0.870029
8 c 0.652986 0.682864
9 p 0.111138 0.587294
np.array保存具有相同数据类型的对象。因此,如 docs
dtype:数据类型,可选
所需的数组数据类型。如果未给出,则将类型确定为将对象保留在其中所需的最小类型。 序列。此参数只能用于“上载”阵列。 对于向下转换,请使用.astype(t)方法。
答案 1 :(得分:0)
解决方案如下:
A = np.random.choice(['c', 'p'], size = 10)
B = np.random.rand(10)
C = np.random.rand(10)
D = np.array(list(zip(A, B, C)))
D= pd.DataFrame(D, columns = ['A', 'B','C'])
D['B'] = D['B'].apply(float)
D['C'] = D['C'].apply(float)
B和C列转换为字符串。有人知道为什么吗?