python - 在存储的 DataFrame 中创建新列的字典理解
问题描述
我有一本包含 Pandas DataFrames 值的字典。我想在每个 DataFrame 中创建新列。我可以轻松地使用 for 循环,但我想要一种更 Pythonic 的方式。字典理解似乎是一种理想的方法。这将如何使用字典理解来完成?
df1 = pd.DataFrame(data =[['2013',98],['2014',100],['2015',110],
['2016',110],['2017',115]],
columns = ['Year','Value'])
df2 = pd.DataFrame(data =[['2013',85],['2014',90],['2015',95],
['2016',97],['2017',99]],
columns = ['Year','Value'])
df3 = pd.DataFrame(data =[['2013',30],['2014',28],['2015',25],
['2016',28],['2017',32]],
columns = ['Year','Value'])
d1 = {}
d1['df1'] = df1
d1['df2'] = df2
d1['df3'] = df3
for k in d1.keys():
d1[k]['shifted'] = d1[k]['Value'].shift(2)
解决方案
您可以制作一个在字典理解中调用的小辅助函数:
def add_shifted_col(df):
df['shifted'] = df['Value'].shift(2)
return df
{k: add_shifted_col(v) for k, v in d1.items()}
编辑:字典理解创建一个新字典。要使用此更新原始文件,您可以调用:
d1.update({k: add_shifted_col(v) for k, v in d1.items()})
如果您只想有条件地将额外的系列添加到数据框的选择中,这可能会很有帮助,例如
update_these = ['df2', 'df3']
d1.update({k: add_shifted_col(v) for k, v in d1.items() if k in update_these})
在此示例中,将向 df2 和 df3 添加一个额外的系列,但不会更改 df1。
推荐阅读
- azure-active-directory - 有没有办法通过 Graph API 获取 Office365 的服务运行状况和信息?
- kubernetes - Kubernetes 上的 Envoy 代理提供 503
- curl - curl不解压deflate页面
- jenkins - 在 Jenkins 中抑制 Simpletest JUnit XML 输出中的警告
- sql - New-AzSqlDatabaseInstanceFailoverGroup 交叉订阅设置失败
- swift - 为什么 NSLocalizedString 在同一个文件中生成“使用未声明的类型”?
- powershell - PowerShell 2.0 中的时差
- java - 无法安装由 GluonHQ JavaFX 创建的 JavaFX Android 应用程序 - 为什么?
- python - 从 dtype 唯一编号到数据类型类
- python-3.x - 在 Windows 10 上的任务计划程序中计划并手动运行 .pyw 脚本