如何转置 Pandas 中的 sumcum 数据?

How to transpose sumcum data in Pandas?

我有这样一个数据集:

Year City
1905 New York
1906 New York
1906 Boston
*** ***
2021 Houston

我想添加 sumcum,所以我做了以下操作:

df["Count"]=1 

df['cumsum']=df.groupby(['City'])['Count'].cumsum()

它运行良好,但不确定这是否是最佳方法。

接下来我想做的是转置数据,同时填补所有空白。因为城市的出现并不一致(例如波士顿出现在 1924 年,然后又出现在 1928 年)。

我想要这个:

我怎样才能用 Pandas 做这个?

谢谢

给定以下玩具数据框:

import pandas as pd

df = pd.DataFrame(
    {
        "Year": {0: 1905, 1: 1906, 2: 1906, 3: 1907, 4: 1908, 5: 1909},
        "City": {
            0: "New York",
            1: "New York",
            2: "Boston",
            3: "New York",
            4: "Boston",
            5: "New York",
        },
    }
)

你可以这样做:

new_df = (
    pd.DataFrame(df.value_counts())
    .rename(columns={0: "Count"})
    .sort_values(by=["Year", "Count"], ascending=True)
    .assign(cumsum=lambda x: x.groupby(["City"])["Count"].cumsum())
    .drop(columns="Count")
    .reset_index()
    .pipe(lambda df_: pd.pivot(df_, index="Year", columns="City"))
    .fillna(method="ffill")
    .fillna(0)
    .droplevel(0, axis=1)
    .reset_index()
    .rename_axis(None, axis=1)
)

print(new_df)
# Output
   Year  Boston  New York
0  1905     0.0       1.0
1  1906     1.0       2.0
2  1907     1.0       3.0
3  1908     2.0       3.0
4  1909     2.0       4.0