将一个函数应用于多个数据帧,将多个DF作为outpu返回

2024-09-30 04:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还比较陌生,但我一直在做一个关于房地产市场的宠物项目。实际上,我有一系列我已经读入并存储为变量的文件,其原始格式如下:

**
cityrentalprice1BR.columns

Index([u'RegionName', u'State', u'Metro', u'CountyName', u'SizeRank',
   u'2010-02', u'2010-03', u'2010-04', u'2010-05', u'2010-06',
   ...
   u'2017-09', u'2017-10', u'2017-11', u'2017-12', u'2018-01', u'2018-02',
   u'2018-03', u'2018-04', u'2018-05', u'2018-06'],
  dtype='object', length=106)**

“宽”格式对我的练习没有特别大的帮助,所以我使用melt函数按城市设置更好的时间序列,结果在单个数据帧上非常好:

^{pr2}$

我的问题是,我有多个文件要以相同的格式导入,而我不希望手动熔化每个数据帧。一个重要的警告是,我更希望将结果推送到新的唯一数据帧中(即,在上面的示例中,cityrentalprice1BR>;cityrentalprice1BR峈melt)。在

我已经为此工作了一段时间,创建了一个dataframe列表,可以将melt函数应用于整个列表,如下所示,但是它缺少了我的主要目标,即保留单独的数据帧(如果合并函数更合适,则为每个数据帧保留列集):

Rental = [cityrentalprice1BR, cityrentalprice2BR, cityrentalprice3BR, cityrentalprice4BR, cityrentalprice5BR, cityrentalpriceCondo, cityrentalpriceDupTri]
for size in Rental:
transformrent = pd.melt(size, id_vars=['RegionName', 'State', 'Metro', 'CountyName', 'SizeRank'], 
            value_vars = dates, 
            value_name = 'Value',
            var_name =['Date'])

如有任何指导,将不胜感激。在


Tags: 文件数据函数列表size格式varsstate
1条回答
网友
1楼 · 发布于 2024-09-30 04:28:52

通常,我在《熊猫与R》中建议,总是使用多个类似对象的单一集合,而不是用单独的变量淹没你的全球环境。这允许您管理一个大对象,而不是使用开放式计数可能忘记的许多对象的名称。想象一下在10000个数据帧中导航!最好浏览一个列表的10000个索引或一个字典的10000个键。在

如果将元素存储在列表、字典甚至命名元组中,则会失去DataFrame的零功能。另外,如果您需要跨所有对象运行操作,那么您有一个用于此类操作的容器。下面展示了如何构建融合数据帧的各种集合(使用定义的函数),演示了DataFrame方法,甚至是像{}这样的批量操作。在

功能

def melt_data(df):   
     mdf = pd.melt(df, id_vars=['RegionName', 'State', 'Metro', 'CountyName', 'SizeRank'], 
                   value_vars = dates, value_name = 'Value', var_name = 'Date')
     return mdf

列表

^{pr2}$

字典

Rental_dict = {'1BR': cityrentalprice1BR, '2BR': cityrentalprice2BR, '3BR': cityrentalprice3BR, 
               '4BR': cityrentalprice4BR, '5BR': cityrentalprice5BR,
               'Condo': cityrentalpriceCondo, 'DupTri': cityrentalpriceDupTri}

# DICTIONARY COMPREHENSION
df_dict = {i+'_melt': melt_data(size) for i, size in Rental_dict.items()}

df_dict['1BR_melt'].shape()
df_dict['2BR_melt'].head()
df_dict['3BR_melt'].tail()
df_dict['Condo_melt'].sum()
df_dict['DupTri_melt'].mean()

# APPEND ALL
master_df = pd.concat(df_dict, ignore_index)

命名元组

from collections import namedtuple

melt_dfs = namedtuple('melt_dfs', 'OneBR TwoBR ThreeBR FourBR FiveBR Condo DupTri')

df_tuple = melt_dfs(*[melt_data(size) for size in Rental_list])
# df_tuple = melt_dfs(*[melt_data(size) for i, size in Rental_dict.items()])

df_tuple.OneBR.shape()
df_tuple.TwoBR.head()
df_tuple.ThreeBR.tail()
df_tuple.FourthBR.sum()
df_tuple.FourthBR.mean()

# APPEND ALL
master_df = pd.concat(df_tuple, ignore_index=True)

独立变量:(

尽管如此,如果您真的需要单独的对象,只需从熔化的数据帧列表中解压:

cityrentalprice1BR_melt, cityrentalprice2BR_melt, cityrentalprice3BR_melt, \
cityrentalprice4BR_melt, cityrentalprice5BR_melt, \
cityrentalpriceCondo_melt, cityrentalpriceDupTri_melt = [melt_data(size) for size in Rental_list]

相关问题 更多 >

    热门问题