python - 是否有可能根据关键字列表创建新列

标签 python pandas list conditional-statements

是否可以根据关键字列表创建新列?

Keywords = ["A", "B"]

我有这样的数据:

Location             Type          
Ger                  A          
Ger                  F
Ger                  C     
Ned                  D
Ned                  A
Ned                  B
Aus                  C
US                   B

如果关键字存在于“类型”列中,并且如果存在 2 个关键字,那么该值应该创建一个新列,两个关键字都带有逗号。我遇到问题,因为我必须先检查位置,然后输入...

Location             Type          NewType
Ger                  A             A
Ger                  F             A
Ger                  C             A
Ned                  D             A,B
Ned                  A             A,B
Ned                  B             A,B
Aus                  C             NaN
US                   B             B

除了if-else还有其他方法吗?

最佳答案

让我们使用groupbymap:

m = df['Type'].isin(keywords)
s = df[m].groupby('Location')['Type'].agg(','.join)
df['NewType'] = df['Location'].map(s)

详细信息:

使用 .isin 创建 bool 掩码测试 keywords 列表中存在的 Type 值:

print(m)

0     True
1    False
2    False
3    False
4     True
5     True
6    False
7     True
Name: Type, dtype: bool

使用上述掩码和 Location 上的 groupby 过滤行,然后使用 join agg Type :

print(s)

Location
Ger      A
Ned    A,B
US       B
Name: Type, dtype: object

.map基于 Location

从上述聚合帧到原始 df 的值
print(df)

  Location Type NewType
0      Ger    A       A
1      Ger    F       A
2      Ger    C       A
3      Ned    D     A,B
4      Ned    A     A,B
5      Ned    B     A,B
6      Aus    C     NaN
7       US    B       B

关于python - 是否有可能根据关键字列表创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65719065/

相关文章:

python - 如何忽略使用自签名证书使用 pip install 到私有(private) pypi 服务器时引发的安全警告

python - 如何使用计数重新采样数据帧到新列并将列聚合到列表中

python 3.5 : search different values in a list

python - 如何从 Python 中的语法中去除 yield 的糖分?

python - Unicode 警告 : special characters in Tkinter

python - 无法使用 dymola python 包进行模拟 - dsres.mat 未找到

python - 取 pandas groupby 中不同大小的组之间的差异

python - pandas 0.21.0 时间戳与 matplotlib 的兼容性问题

jquery - 将 UL 转换为带 OPTGROUP 的 SELECT

java - 在Java中将两个字符串 append 到数组中的一个索引