我拿到数据帧了.

data={"ID":[1,1,1,1,1,1,1,1,1,2,2,2],
"Year":[2000,2001,2002,2003,2004,1997,1998,2003,2004,1997,1998,2005],
"Firm":["A","A","B","B","A","A","A","A","B","B","A","A"],
"Count":[0,1,0,0,0,0,0,0,0,0,0,0]}

df1=pd.DataFrame(data)

预期的输出是这样的.

data={"ID":[1,1,1,1,1,1,1,1,1,2,2,2],
"Year":[2000,2001,2002,2003,2004,1997,1998,2003,2004,1997,1998,2005],
"Firm":["A","A","B","B","A","A","A","A","B","B","A","A"],
"Count":[0,1,0,0,0,0,0,0,0,0,0,0],
"Count_1":[0,1,1,1,1,0,0,1,1,0,0,0]}

df2=pd.DataFrame(data)

我可以通过我的代码实现预期的输出.

df_1=df1.sort_values(by=["ID","Year"],ascending=True)
df_1["Count_1"]=np.where(df_1["Count"]==1,1,np.NaN)
df_1["Count_1"]=df_1.groupby(["ID"],as_index=None)["Count_1"].ffill()
df_1.drop(columns=["Count"],inplace=True)
df_1.fillna(0)

但是,我正在寻找一个更短,更干净的代码.

推荐答案

try :

df1 = df1.sort_values(by=["ID", "Year"])
df1["Count_1"] = (df1.groupby("ID")["Count"].cumsum() > 0).astype(int)
print(df1)

打印:

    ID  Year Firm  Count  Count_1
5    1  1997    A      0        0
6    1  1998    A      0        0
0    1  2000    A      0        0
1    1  2001    A      1        1
2    1  2002    B      0        1
3    1  2003    B      0        1
7    1  2003    A      0        1
4    1  2004    A      0        1
8    1  2004    B      0        1
9    2  1997    B      0        0
10   2  1998    A      0        0
11   2  2005    A      0        0

Python-3.x相关问答推荐

如何将多个字典合并到一个列中,并为不同的行使用相同的键

汉明距离:涉及按位运算的逻辑步骤不清楚

错误:无法为 pyconcorde 构建轮子,这是安装基于 pyproject.toml 的项目所必需的

通过 Pandas 通过用户定义函数重命名数据框列

Pandas 窗口聚合两个排序表

!date 的命令无法从 jupyter notebook 运行

过滤并获取数据框中条件之间的行

使用 GEKKO 使用代码解决最佳时间控制问题时出现 IndexError

python2和python3中的列表生成器

是否可以将多个 if 转换为数组?

如何将虚拟变量列转换为多列?

日志(log)模块不适用于 Python3

pythondecorator中的变量范围

如何通过python打开文件

为什么 Django South 1.0 使用 iteritems()?

使用 Sympy 方程进行绘图

是否有与 Laravel 4 等效的 python?

为 Python 3 和 PyQt 构建可执行文件

plt.cm.get_cmap 中可以使用哪些名称?

aiohttp:如何从 requests.get 检索 aiohttp 服务器中的数据(正文)