我拿到数据帧了.

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相关问答推荐

只有在Chrome尚未打开的情况下,打开Chrome后,PySimpleGUI窗口才会崩溃

S的两极是什么,相当于大Pandas 的`.ilo‘方法?

While循环不停止地等待,直到时间.睡眠结束

从Metacritic上通过网络擦除游戏数据的问题

AddMultplicationEquality() 用于多个变量

向前/向后移动导致移动行的数据不可见

找到在指定列的另一个分组中存在重复的行.

数据框中从每个组/ID的底部删除行

提取图像中的背景并保存

Pytest顺序测试A,然后测试B,然后再测试A

仅当从 USB 摄像头接收到新图像时才处理图像

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

如何在数据['column']中的'string'等条件下应用pandas

总结基于条件的值,如果不匹配则保留当前值

Pythonic,自定义警告

使用 Sympy 方程进行绘图

使用 pytest.fixture 返回模拟对象的正确方法

如何在 Python 中计算两个包含字符串的列表的 Jaccard 相似度?

从大字典中弹出 N 项的最快方法

finally 总是在 try 块返回之前运行,那么为什么 finally 块中的更新不会影响 try 块返回的变量的值呢?