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'))