use*_*044 4 python python-2.7 pandas
我有一个pandas
数据框,我想在上面使用Apply函数根据现有数据生成两个新列。我收到此错误:
ValueError: Wrong number of items passed 2, placement implies 1
import pandas as pd
import numpy as np
def myfunc1(row):
C = row['A'] + 10
D = row['A'] + 50
return [C, D]
df = pd.DataFrame(np.random.randint(0,10,size=(2, 2)), columns=list('AB'))
df['C', 'D'] = df.apply(myfunc1 ,axis=1)
Run Code Online (Sandbox Code Playgroud)
启动DF:
A B
0 6 1
1 8 4
Run Code Online (Sandbox Code Playgroud)
所需DF:
A B C D
0 6 1 16 56
1 8 4 18 58
Run Code Online (Sandbox Code Playgroud)
小智 10
这个对我有用:
def myfunc1(row):
C = row['A'] + 10
D = row['A'] + 50
return C, D
df = pd.DataFrame(np.random.randint(0,10,size=(2, 2)), columns=list('AB'))
df[['C', 'D']] = df.apply(myfunc1, axis=1, result_type='expand')
df
Run Code Online (Sandbox Code Playgroud)
添加:==>> result_type='expand',
问候!
请注意所接受答案的巨大内存消耗和低速度: https: //ys-l.github.io/posts/2015/08/28/how-not-to-use-pandas-apply/!
使用那里提出的建议,正确的答案将是这样的:
def run_loopy(df):
Cs, Ds = [], []
for _, row in df.iterrows():
c, d, = myfunc1(row['A'])
Cs.append(c)
Ds.append(d)
return pd.Series({'C': Cs,
'D': Ds})
def myfunc1(a):
c = a + 10
d = a + 50
return c, d
df[['C', 'D']] = run_loopy(df)
Run Code Online (Sandbox Code Playgroud)
根据您的最新错误,可以通过将新列作为系列返回来避免错误
def myfunc1(row):
C = row['A'] + 10
D = row['A'] + 50
return pd.Series([C, D])
df[['C', 'D']] = df.apply(myfunc1 ,axis=1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3546 次 |
最近记录: |