首页 > 解决方案 > 将 Pandas 中州和大学城的列转换为两列,第 1 列:州和第 2 列:关联的大学城

问题描述

我在 Pandas 中有一个系列,它是一列州,在每个州的下方,是该州的大学城。

例如

纽约:伊萨卡纽约市 北卡罗来纳州 达勒姆罗利等...

所有这些都在一列中,按状态字母顺序降序排列。

我必须通过在左侧创建一个新列来分隔这些数据,该列将是州列表,右侧是相关的大学城。例如

第 1 栏:纽约 / 第 2 栏:伊萨卡

除了为每个州手动输入字典以关联大学城之外,是否有一种优雅的方式来形成这些关联并创建两列结构?

谢谢!

标签: pandas

解决方案


我假设您的示例数据(格式正确)是:

0          New York
1            Ithaca
2     New York City
3    North Carolina
4            Durham
5           Raleigh
dtype: object

每个“部门”(关于特定州)都从州名开始,然后有许多带有城市的单元 - 大学站点。

从创建仅包含状态名称的辅助系列开始。对于您的示例数据,仅限于 2 个状态,它可以是:

states = pd.Series(['New York', 'North Carolina'])

当然,在目标实现中包括所有状态名称。

然后,要生成结果,请运行:

result = s.groupby(s.isin(states).cumsum()).apply(
    lambda grp: pd.DataFrame({'State': grp.iloc[0], 'City': grp.iloc[1:]}))\
    .reset_index(drop=True)

对于您的样本数据,结果是:

            State           City
0        New York         Ithaca
1        New York  New York City
2  North Carolina         Durham
3  North Carolina        Raleigh

推荐阅读