我正在尝试为字典调用的数据帧添加后缀。
以下是示例代码:
import pandas as pd
import numpy as np
from collections import OrderedDict
from itertools import chain
# defining stuff
num_periods_1 = 11
num_periods_2 = 4
num_periods_3 = 5
# create sample time series
dates1 = pd.date_range('1/1/2000 00:00:00', periods=num_periods_1, freq='10min')
dates2 = pd.date_range('1/1/2000 01:30:00', periods=num_periods_2, freq='10min')
dates3 = pd.date_range('1/1/2000 02:00:00', periods=num_periods_3, freq='10min')
# column_names = ['WS Avg','WS Max','WS Min','WS Dev','WD Avg']
# column_names = ['A','B','C','D','E']
column_names_1 = ['C', 'B', 'A']
column_names_2 = ['B', 'C', 'D']
column_names_3 = ['E', 'B', 'C']
df1 = pd.DataFrame(np.random.randn(num_periods_1, len(column_names_1)), index=dates1, columns=column_names_1)
df2 = pd.DataFrame(np.random.randn(num_periods_2, len(column_names_2)), index=dates2, columns=column_names_2)
df3 = pd.DataFrame(np.random.randn(num_periods_3, len(column_names_3)), index=dates3, columns=column_names_3)
sep0 = '<~>'
suf1 = '_1'
suf2 = '_2'
suf3 = '_3'
ddict = {'df1': df1, 'df2': df2, 'df3': df3}
frames_to_concat = {'Sheets': ['df1', 'df3']}
Suffs = {'Suffixes': ['Suffix 1', 'Suffix 2', 'Suffix 3']}
Suff = {'Suffix 1': suf1, 'Suffix 2': suf2, 'Suffix 3': suf3}
## appply suffix to each data frame selected in order HERE
# Suffdict = [Suff[x] for x in Suffs['Suffixes']]
# print(Suffdict)
df4 = pd.concat([ddict[x] for x in frames_to_concat['Sheets']],
axis=1,
join='outer')
我想为每个数据帧添加一个后缀,以便在连接数据帧时可以区分它们。我在调用它们然后将它们应用于每个数据帧时遇到了一些麻烦。所以我要求连接df1和df3,我希望只将后缀1应用于df1,后缀2应用于df3。
如果df2和df3被调用,则顺序与数据帧后缀无关,后缀1将应用于df2,后缀2将应用于df3。显然不会使用最后一个后缀。
答案 0 :(得分:1)
除非你有python3.6,否则你无法保证词典中的顺序。即使您可以使用python3.6,这也意味着您的代码不会在任何较低的python版本中运行。如果您需要订单,则应该查看列表。
您可以将数据框和后缀存储在列表中,然后使用/path/to/something
依次为每个df添加后缀。
zip
根据您的代码/答案,您可以将数据框和后缀加载到列表中,调用dfs = [df1, df2, df3]
sufs = [suf1, suf2, suf3]
df_sufs = [x.add_suffix(y) for x, y in zip(dfs, sufs)]
,为每个列表添加后缀,然后调用zip
。
pd.concat
答案 1 :(得分:0)
结束为这个问题做一个简单的迭代器。这是我的解决方案
n=0
for df in frames_to_concat['Sheets']:
print(df_dict[df])
df_dict[df] = df_dict[df].add_suffix(sep0 + suff[suffs['Suffixes'][n]])
n = n+1
任何人都有更好的方法吗?