假设我有一个数据框
>>> df = pd.DataFrame({"body": ["abc", "def", "ghi"]})
>>> df
body
0 abc
1 def
2 ghi
Run Code Online (Sandbox Code Playgroud)
我有一个用于演示的神奇功能
def magic(string):
return {"first": string[0], "second": string[1]}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以快速将此函数应用于 df 并将返回字典中的所有值添加回 df (即,因此 df 将具有 [“body”,“first”,“second”] 的头部?
更新:
输出示例:
>>> df_out
body first second
0 abc a b
1 def d e
2 ghi g h
Run Code Online (Sandbox Code Playgroud)
更新 1:真正的“神奇”函数相当大:它将占用 df 中的一个字段并返回一个 len ~= 100 的字典。因此效率非常重要。
例如,您可以按如下方式进行:
In [5]: df = pd.DataFrame({"body": ["abc", "def", "ghi"]})
In [6]: df
Out[6]:
body
0 abc
1 def
2 ghi
In [7]: df.body.apply(lambda x: pd.Series({"first": x[0], "second": x[1]}))
Out[7]:
first second
0 a b
1 d e
2 g h
In [8]: df[['first','second']] = df.body.apply(lambda x: pd.Series({"first": x[0], "second": x[1]}))
In [9]: df
Out[9]:
body first second
0 abc a b
1 def d e
2 ghi g h
Run Code Online (Sandbox Code Playgroud)
使用你的魔法功能:
In [11]: df = pd.DataFrame({"body": ["abc", "def", "ghi"]})
In [12]: df
Out[12]:
body
0 abc
1 def
2 ghi
In [13]: def magic(string):
....: return {"first": string[0], "second": string[1]}
....:
In [14]: df[['first','second']] = df.body.apply(lambda x: pd.Series(magic(x)))
In [15]: df
Out[15]:
body first second
0 abc a b
1 def d e
2 ghi g h
Run Code Online (Sandbox Code Playgroud)
编辑: 根据下面评论中的问题,您可以使用 df.join 不必显式写入列的名称:
In [39]: df.join(df.body.apply(lambda x: pd.Series(magic(x))))
Out[39]:
body first second
0 abc a b
1 def d e
2 ghi g h
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5076 次 |
| 最近记录: |