如何一次 edit/add 两列到 pandas 中的数据框 - df.apply()
How to edit/add two columns to a dataframe in pandas at once - df.apply()
所以我一直在用 pandas 做这样的事情:
usrdata['columnA'] = usrdata.apply(functionA, axis=1)
为了对我的数据框进行行操作和 changing/adding 列操作。
但是,现在我想尝试做这样的事情:
usrdata['columnB', 'columnC'] = usrdata.apply(functionB, axis=1)
但是函数 B 的输出显然是一个元组中只有一列的系列(每行有两个值)。有没有什么好的方法可以让我:
- 格式化函数 B 的输出,以便它可以很容易地添加到我的
数据框
- 添加(并且可能必须解压缩)functionB 的输出并将每一列分配给我的数据框的每一列?
尝试使用 zip
:
usrdata['columnB'], usrdata['columnC'] = zip(*usrdata.apply(functionB, axis=1))
我会直接分配给一个由你的新 df 组成的 df,并将 func 主体修改为 return 一个由数据列表构成的系列:
In [9]:
df = pd.DataFrame({'a':[1, 2, 3, 4, 5]})
df
Out[9]:
a
0 1
1 2
2 3
3 4
4 5
In [10]:
def func(x):
return pd.Series([x*3, x*10])
df[['b','c']] = df['a'].apply(func)
df
Out[10]:
a b c
0 1 3 10
1 2 6 20
2 3 9 30
3 4 12 40
4 5 15 50
所以我一直在用 pandas 做这样的事情:
usrdata['columnA'] = usrdata.apply(functionA, axis=1)
为了对我的数据框进行行操作和 changing/adding 列操作。 但是,现在我想尝试做这样的事情:
usrdata['columnB', 'columnC'] = usrdata.apply(functionB, axis=1)
但是函数 B 的输出显然是一个元组中只有一列的系列(每行有两个值)。有没有什么好的方法可以让我:
- 格式化函数 B 的输出,以便它可以很容易地添加到我的 数据框
- 添加(并且可能必须解压缩)functionB 的输出并将每一列分配给我的数据框的每一列?
尝试使用 zip
:
usrdata['columnB'], usrdata['columnC'] = zip(*usrdata.apply(functionB, axis=1))
我会直接分配给一个由你的新 df 组成的 df,并将 func 主体修改为 return 一个由数据列表构成的系列:
In [9]:
df = pd.DataFrame({'a':[1, 2, 3, 4, 5]})
df
Out[9]:
a
0 1
1 2
2 3
3 4
4 5
In [10]:
def func(x):
return pd.Series([x*3, x*10])
df[['b','c']] = df['a'].apply(func)
df
Out[10]:
a b c
0 1 3 10
1 2 6 20
2 3 9 30
3 4 12 40
4 5 15 50