DataFrame.assign
_DataFrame.assign(kwargs)**
给DataFrame分配一个新列,返回一个新的_DataFrame对象,不仅包含新添加的列,还包含所有原始的列。重新分配的现有列将被覆盖。
举例:使用count列和price列的乘积作为total列
import pandas as pd
df = pd.DataFrame({'site':['google', 'baidu', 'wiki', 'pandas'],
'count':[18, 39, 22, 45],
'price': [1.0, 2.0, 3.0, 4.0]})
df = df.assign(total=df['count'] * df['price'])
------------------------------------
site count price total
0 google 18 1.0 18.0
1 baidu 39 2.0 78.0
2 wiki 22 3.0 66.0
3 pandas 45 4.0 180.0
举例:为原本的site列的所有元素重新赋值
import pandas as pd
df = pd.DataFrame({'site':['google', 'baidu', 'wiki', 'pandas'],
'count':[18, 39, 22, 45],
'price': [1.0, 2.0, 3.0, 4.0]})
df = df.assign(site=['google','google','google','google'])
-------------------------------
site count price
0 google 18 1.0
1 google 39 2.0
2 google 22 3.0
3 google 45 4.0
举例:将Lambda表达式的结果作为total列添加
import pandas as pd
df = pd.DataFrame({'site':['google', 'baidu', 'wiki', 'pandas'],
'count':[18, 39, 22, 45],
'price': [1.0, 2.0, 3.0, 4.0]})
df = df.assign(total=lambda x: x['price'] / 2)
-------------------------------------
site count price total
0 google 18 1.0 0.5
1 baidu 39 2.0 1.0
2 wiki 22 3.0 1.5
3 pandas 45 4.0 2.0
举例:将Series对象作为新的列
import pandas as pd
df = pd.DataFrame({'site':['google', 'baidu', 'wiki', 'pandas']})
s1 = pd.Series([18, 39, 22, 45], name='count')
s2 = pd.Series([1, 2, 3, 4], name='price')
df.assign(count=s1, price=s2)
----------------------------------------------------------------
site count price
0 google 18 1
1 baidu 39 2
2 wiki 22 3
3 pandas 45 4