如何转置 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
我有这样一个数据集:
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