假设我有一个数据框
>>> df = pd.DataFrame({"body": ["abc", "def", "ghi"]})
>>> df
body
0 abc
1 def
2 ghi
我只有演示
的魔术功能def magic(string):
return {"first": string[0], "second": string[1]}
有没有办法可以快速将此函数应用于df并将返回dict中的所有值添加回df(即,因此df将具有[" body",& #34;第一个","第二个"]?
更新:
输出示例:
>>> df_out
body first second
0 abc a b
1 def d e
2 ghi g h
更新1: 真正的魔法"函数非常大:它将在df中占用一个字段并返回一个len~ = 100的字典。因此效率很重要。
答案 0 :(得分:3)
我这样做:
In [4]: df[['first','second']] = df.body.str.extract(r'(.)(.)', expand=True)
In [5]: df
Out[5]:
body first second
0 abc a b
1 def d e
2 ghi g h
答案 1 :(得分:2)
您可以按照以下步骤操作,例如:
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
使用你的魔法功能:
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
修改强> 根据您在下面的评论中的问题,您可以使用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