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

将DataFrame拆分为DataFrame
EN

Stack Overflow用户
提问于 2017-11-20 11:44:24
回答 2查看 454关注 0票数 4

我有一个DataFrame,不同的行可以对一个列具有相同的值。

例如:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame( { 
    "Name" : ["Alice", "Bob", "John", "Mark", "Emma" , "Mary"] , 
    "City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )

     City       Name
0    Seattle    Alice
1    Seattle    Bob
2    Portland   John
3    Seattle    Mark
4    Seattle    Emma
5    Portland   Mary

在这里,一个给定的“城市”的价值。“波特兰”)由几行共享。

我想从这个数据框架中创建几个具有一个列的共同值的数据帧。对于上面的示例,我想获得以下数据帧:

代码语言:javascript
复制
     City       Name
0    Seattle    Alice
1    Seattle    Bob
3    Seattle    Mark
4    Seattle    Emma

代码语言:javascript
复制
     City       Name
2    Portland   John
5    Portland   Mary

从这个answer中,我创建了一个掩码,可以用来生成一个数据帧:

代码语言:javascript
复制
def mask_with_in1d(df, column, val):
    mask = np.in1d(df[column].values, [val])
    return df[mask]

# Return the last data frame above
mask_with_in1d(df, 'City', 'Portland')

问题是如何有效地创建所有数据帧,为其指定名称。我是这样做的:

代码语言:javascript
复制
unique_values = np.sort(df['City'].unique())
for city_value in unique_values:
    exec("df_{0} = mask_with_in1d(df, 'City', '{0}')".format(city_value))

这给了我可以进一步操作的数据帧df_Seattledf_Portland

有更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-20 11:52:02

你有一个固定的城市名单,你想这样做吗?最简单的解决方案是按城市分组,然后遍历组。

代码语言:javascript
复制
for city, names in df.groupby("City"):
    print(city)
    print(names)

Portland
       City  Name
2  Portland  John
5  Portland  Mary
Seattle
      City   Name
0  Seattle  Alice
1  Seattle    Bob
3  Seattle   Mark
4  Seattle   Emma

然后,如果您想让df_city[city] = names工作,可以将其分配给字典或其他类似的( df_city["Portland"] )。这取决于你想要对一旦分裂的组做些什么。

票数 5
EN

Stack Overflow用户

发布于 2017-11-20 11:52:22

您可以为此使用groupby

代码语言:javascript
复制
dfs = [gb[1] for gb in df.groupby('City')]

这将构造一个数据格式列表,即'City'列的一个值。

如果您想要具有dataframe值的元组,可以使用:

代码语言:javascript
复制
dfs = list(df.groupby('City'))

注意,按名称分配通常是一种反模式。execeval绝对是反模式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47391257

复制
相关文章

相似问题

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