我是Python的新手,并且可能是一个基本问题。
我导入了许多Pandas Dataframes,其中包含不同行业的库存数据。所以所有列都是相同的,只是使用不同的数据框名称。
我需要在一些列上做很多不同的小操作,我可以一次弄清楚如何在一个Dataframe上做,但我需要弄清楚如何循环不同的帧并做每个人都有相同的操作。
例如对于一个DF我做:
ConsumerDisc['IDX_EST_PRICE_BOOK']=1/ConsumerDisc['IDX_EST_PRICE_BOOK']
ConsumerDisc['IDX_EST_EV_EBITDA']=1/ConsumerDisc['IDX_EST_EV_EBITDA']
ConsumerDisc['INDX_GENERAL_EST_PE']=1/ConsumerDisc['INDX_GENERAL_EST_PE']
ConsumerDisc['EV_TO_T12M_SALES']=1/ConsumerDisc['EV_TO_T12M_SALES']
ConsumerDisc['CFtoEarnings']=ConsumerDisc['CASH_FLOW_PER_SH']/ConsumerDisc['TRAIL_12M_EPS']
而不是仅仅为接下来的10个扇区复制和粘贴此代码,我想以某种方式在循环中进行,但我无法弄清楚如何通过变量访问df,例如:
CS=['ConsumerDisc']
CS['IDX_EST_PRICE_BOOK']=1/CS['IDX_EST_PRICE_BOOK']
所以我可以创建一个df名称列表并循环遍历它。
希望你能举一个小例子来说明这一点。
答案 0 :(得分:2)
你可能正在寻找像这样的东西
for df in (df1, df2, df3):
df['IDX_EST_PRICE_BOOK']=1/df['IDX_EST_PRICE_BOOK']
df['IDX_EST_EV_EBITDA']=1/df['IDX_EST_EV_EBITDA']
df['INDX_GENERAL_EST_PE']=1/df['INDX_GENERAL_EST_PE']
df['EV_TO_T12M_SALES']=1/df['EV_TO_T12M_SALES']
df['CFtoEarnings']=df['CASH_FLOW_PER_SH']/df['TRAIL_12M_EPS']
这里我们迭代我们放在元组数据结构中的数据帧,这有意义吗?
答案 1 :(得分:0)
你的意思是这样吗?
import pandas as pd
d = {'a' : pd.Series([1, 2, 3, 10]), 'b' : pd.Series([2, 2, 6, 8])}
z = {'d' : pd.Series([4, 2, 3, 1]), 'e' : pd.Series([21, 2, 60, 8])}
df = pd.DataFrame(d)
zf = pd.DataFrame(z)
df.head()
a b
0 1 2
1 2 2
2 3 6
3 10 8
df = df.apply(lambda x: 1/x)
df.head()
a b
0 1.0 0.500000
1 2.0 0.500000
2 3.0 0.166667
3 10.0 0.125000
您有更多功能,因此您可以创建一个功能,然后只需apply
每个DataFrame。或者,您也可以将这些lambda函数仅应用于特定列。因此,假设您只想将1 /列应用于每一列,但最后一个(通过您的示例,我假设它最终)您可以df.ix[:, :-1].apply(lambda x : 1/x)
。