如何在pandas中创建新DataFrame的同时新增自定义计算列
解决方案
- 方法1:使用pandas内置的
assign()方法(推荐,不会修改原始DataFrame)assign()方法会返回添加新列后的新DataFrame,不会改动原始数据,完美匹配你创建新对象的需求,列名带空格的场景可以用字典解包的方式传参:
import pandas as pd d = {'col1': [1, 2], 'col2': [3, 4]} # 一行完成创建新DataFrame+添加计算列 new_df = pd.DataFrame(data=d).assign(**{'new column': lambda x: x['col1'] * 2 + x['col2'] / 4}) print(new_df)
如果新列名没有空格,写法可以简化为:assign(new_col = lambda x: x['col1'] * 2 + x['col2'] /4)。
- 方法2:构造数据时直接预计算新列值
如果不想调用assign(),也可以在构造DataFrame的入参字典时,直接把新列的值先算好:
import pandas as pd d = {'col1': [1, 2], 'col2': [3, 4]} new_df = pd.DataFrame(data={**d, 'new column': [a*2 + b/4 for a, b in zip(d['col1'], d['col2'])]}) print(new_df)
注意:你原有写法里的
new_df = df属于引用传递,修改new_df的列会同步修改原始的df,上面两种方法生成的都是独立的新DataFrame,不会影响原始数据。
内容的提问来源于stack exchange,提问作者Hary2
相关产品推荐
相关产品推荐

