用 Python 复制 SAS 的第一个和最后一个功能

Tay*_*lrl 5 python dataframe pandas

我最近迁移到 Python 作为我的主要分析工具,我希望能够复制第一个工具。& 最后的。SAS 中的功能。SAS 代码如下;

data data.out;
   set data.in;
   if first.ID then flag = 1;
   if last.ID then flag = 1;
run;
Run Code Online (Sandbox Code Playgroud)

输出如下;

ID     flag
AAAA   1
AAAA   0
AAAA   0
AAAA   1
BBBB   1
BBBB   0
BBBB   0
BBBB   1
CCCC   1
CCCC   0
CCCC   1
Run Code Online (Sandbox Code Playgroud)

关于如何在 Python 中执行此操作的任何想法?

cs9*_*s95 4

如果您使用 python 和处理数字,这种类型的事情通常会使用pandas

pip install pandas
Run Code Online (Sandbox Code Playgroud)

假设您有一个 CSV 文件,您可以使用 加载数据pd.read_csv。我不会对您的输入做出假设,因此请查看文档。加载数据框后,您就可以继续。

import pandas

df = pd.read_csv('file.csv')
df

      ID
0   AAAA
1   AAAA
2   AAAA
3   AAAA
4   BBBB
5   BBBB
6   BBBB
7   BBBB
8   CCCC
9   CCCC
10  CCCC

df['flag'] = ((df.ID != df.ID.shift()) | (df.ID != df.ID.shift(-1))).astype(int)
df
      ID  flag
0   AAAA     1
1   AAAA     0
2   AAAA     0
3   AAAA     1
4   BBBB     1
5   BBBB     0
6   BBBB     0
7   BBBB     1
8   CCCC     1
9   CCCC     0
10  CCCC     1
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下方法来做到这一点np.where(感谢 Brad Solomon 的建议):

df['flag'] = np.where((df.ID != df.ID.shift()) \
                  | (df.ID != df.ID.shift(-1)), 1, 0)
df
      ID  flag
0   AAAA     1
1   AAAA     0
2   AAAA     0
3   AAAA     1
4   BBBB     1
5   BBBB     0
6   BBBB     0
7   BBBB     1
8   CCCC     1
9   CCCC     0
10  CCCC     1
Run Code Online (Sandbox Code Playgroud)