首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Dataframe拆分为多个Dataframe

将Dataframe拆分为多个Dataframe
EN

Stack Overflow用户
提问于 2022-04-13 11:42:56
回答 2查看 47关注 0票数 1

我有一个数据(大约50k行和150个列)与能源和天气变量数据来自不同的城市。

我想把数据分割成5个数据(每个城市都有一个数据)。

整个dataframe基本上是这样构造的。

代码语言:javascript
复制
df = pd.DataFrame({'Weather':[4,5,4,5,5,4],
                   'Energy':[7,8,9,4,2,3],
                   'Weather_city1':[1,3,5,7,1,0],
                   'Energy_city1':[7,4,7,2,1,0],
                   'Weather_city2':[1,0,6,2,6,9],
                   'Energy_city2':[6,1,5,3,2,7]}
                  )

print (df)
  Weather  Energy  Weather_city1  Energy_city1 ...
0   4        4           7             1
1   5        5           8             3
2   4        4           9             5
3   5        5           4             7
4   5        5           2             1
5   4        4           3             0

如何将其分解为更多的数据(一个用于每个城市,值仅用于city1,一个用于city2等等)?

EN

回答 2

Stack Overflow用户

发布于 2022-04-13 12:00:47

IIUC,你可以:

代码语言:javascript
复制
# columns without city id
cols = ['Weather', 'Energy']

groups = df.drop(columns=cols).columns.str.extract('(?<=_)(.*)$', expand=False)

[g.reset_index() for _, g in df.set_index(cols).groupby(groups, axis=1)]

产出:

代码语言:javascript
复制
[   Weather  Energy  Weather_city1  Energy_city1
 0        4       7              1             7
 1        5       8              3             4
 2        4       9              5             7
 3        5       4              7             2
 4        5       2              1             1
 5        4       3              0             0,
    Weather  Energy  Weather_city2  Energy_city2
 0        4       7              1             6
 1        5       8              0             1
 2        4       9              6             5
 3        5       4              2             3
 4        5       2              6             2
 5        4       3              9             7]

作为字典:

代码语言:javascript
复制
{name: g.reset_index()
 for name, g in df.set_index(['Weather', 'Energy']).groupby(groups, axis=1)}

产出:

代码语言:javascript
复制
{'city1':    Weather  Energy  Weather_city1  Energy_city1
 0        4       7              1             7
 1        5       8              3             4
 2        4       9              5             7
 3        5       4              7             2
 4        5       2              1             1
 5        4       3              0             0,
 'city2':    Weather  Energy  Weather_city2  Energy_city2
 0        4       7              1             6
 1        5       8              0             1
 2        4       9              6             5
 3        5       4              2             3
 4        5       2              6             2
 5        4       3              9             7}
票数 0
EN

Stack Overflow用户

发布于 2022-04-13 12:25:34

我会直接转换原始数据

代码语言:javascript
复制
import pandas as pd

data = {'Weather_city1':[1,3,5,7,1,0],
        'Energy_city1':[7,4,7,2,1,0],
        'Weather_city2':[1,0,6,2,6,9],
        'Energy_city2':[6,1,5,3,2,7]}
代码语言:javascript
复制
# get the list of unique city
cities = set([elem.split("_")[1] for elem in data.keys()]) 
代码语言:javascript
复制
import numpy as np
city_data = {}
for city in cities:
    city_data[city] = {"Weather": data[f"Weather_{city}"], "Energy": data[f"Energy_{city}"]}
代码语言:javascript
复制
city_data
代码语言:javascript
复制
{'city1': {'Weather': [1, 3, 5, 7, 1, 0], 'Energy': [7, 4, 7, 2, 1, 0]},
 'city2': {'Weather': [1, 0, 6, 2, 6, 9], 'Energy': [6, 1, 5, 3, 2, 7]}}

然后你就可以和熊猫玩了

代码语言:javascript
复制
cities_dataframes = {city: pd.DataFrame(city_data[city]) for city in cities}
代码语言:javascript
复制
cities_dataframes['city1']

#   Weather Energy
#    0  1   7
#    1  3   4
#    2  5   7
#    3  7   2
#    4  1   1
#    5  0   0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71856912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档