是否可以根据关键字列表创建新列?
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
还有其他方法吗?
最佳答案
让我们使用groupby
和map
:
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/