我有一个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
Run Code Online (Sandbox Code Playgroud)
此处,“城市”(例如“波特兰”)的给定值由多行共享。
我想从这个数据框创建几个数据框,它们的共同点是一列的值。对于上面的示例,我想获得以下数据框:
City Name
0 Seattle Alice
1 Seattle Bob
3 Seattle Mark
4 Seattle Emma
Run Code Online (Sandbox Code Playgroud)
和
City Name
2 Portland John
5 Portland Mary
Run Code Online (Sandbox Code Playgroud)
根据这个答案,我正在创建一个可用于生成一个数据框的掩码:
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')
Run Code Online (Sandbox Code Playgroud)
问题是有效地创建所有数据框,并为其分配名称。我是这样做的:
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))
Run Code Online (Sandbox Code Playgroud)
这使我的数据帧df_Seattle和df_Portland我可以进一步处理。
有没有更好的方法来做到这一点?
你有一个固定的城市清单吗?最简单的解决方案是按城市分组,然后可以遍历组
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
Run Code Online (Sandbox Code Playgroud)
df_city[city] = names如果您想df_city["Portland"]工作,则可以分配给字典或诸如此类的 ( ) 。取决于您想在拆分后如何处理组。
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |