Python 将数据帧拆分为数据帧';s

Python 将数据帧拆分为数据帧';s,python,python-3.x,Python,Python 3.x,我有一个DataFrame,其中不同的行可以对一列具有相同的值 例如: import pandas as pd df = pd.DataFrame( { "Name" : ["Alice", "Bob", "John", "Mark", "Emma" , "Mary"] , "City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } ) City Nam

我有一个
DataFrame
,其中不同的行可以对一列具有相同的值
例如:

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
这里,“城市”(例如“波特兰”)的给定值由多行共享

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

     City       Name
0    Seattle    Alice
1    Seattle    Bob
3    Seattle    Mark
4    Seattle    Emma

由此,我创建了一个可用于生成一个数据帧的掩码:

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')
问题是要高效地创建所有数据帧,并为其指定名称。我是这样做的:

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_西雅图
df_波特兰


有更好的方法吗?

你有固定的城市列表吗?最简单的解决方案是按城市分组,然后在这些组上循环

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[“Portland”]
工作,可以分配给字典或类似的(
df_city[city]=名称)。取决于您希望在分组后对分组执行的操作

您可以为此使用
groupby

dfs = [gb[1] for gb in df.groupby('City')]
这将构造一个数据帧列表,每个
'City'
列的值一个

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

dfs = list(df.groupby('City'))

请注意,按名称分配通常是一种反模式。和
exec
eval
绝对是反模式。

可重复的问题。谢谢,绝对干净。我会对数据框中所有独特的城市值执行此操作。创建字典将是我的用例的最佳方法。谢谢,很高兴知道这些输出数据结构方面的替代方法。我从另一个不是我的代码中了解到了exec。很高兴知道,通常应该避免这种情况。(刚刚发现这个反模式,似乎值得一试。)
dfs = list(df.groupby('City'))