DataFrame也基于多列应用函数,并为多列设置值

时间:2017-07-23 23:00:51

标签: python pandas dataframe

我有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需要调整)?

2 个答案:

答案 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