我有DataFrame如下:
df = pd.DataFrame((np.random.randn(5,4)*10).astype(int), columns=list('abcd'))
def cal(a, b):
if a + b > 5:
return a+b, a-b
我怎么能将这个函数应用到df,cal的两个变量是df [' a']和[' b'],输出a + b,ab将设置为df [' c'],df [' d']。
循环df工作,但我怎么能使用apply或applymap来实现这一点(也许cal需要调整)?
答案 0 :(得分:4)
您可以使用蒙版进行矢量化:
vals = pd.concat((df['a'] + df['b'], df['a'] - df['b']), axis=1).values
df[['c', 'd']].mask(df['a'] + df['b'] > 5, vals)
Out:
c d
0 6 3
1 -12 3
2 12 -14
3 21 -31
4 15 -21
原始df是
df
Out:
a b c d
0 3 -2 6 3
1 -4 -8 -12 3
2 -1 13 10 -4
3 -5 26 -21 17
4 -3 18 14 19
答案 1 :(得分:0)
<datasource jndi-name="java:jboss/datasources/sampleDS" pool-name="sampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://192.168.155.110:3306/databasename</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>root</password>
</security>
</datasource>
使用np.random.seed([3,1415])
df = pd.DataFrame(
(np.random.randn(5, 4) * 10).astype(int),
columns=list('abcd')
)
df
a b c d
0 -21 -12 -19 -22
1 -3 0 3 3
2 7 7 -6 3
3 -3 -4 -9 -1
4 7 -15 6 4
并乘以适当的转换
dot