[英]Python Pandas: Check the value of a column over multiple rows with the same index
[英]Python pandas: check if a rows value is in another row of the same column without a for loop
我正在处理一个包含分配有数值的字符串的数据框。 对于每个字符串,我想检查它是否作为另一个字符串中的子字符串出现。 如果是,那么我想在新列中为其分配两个数值中较低的一个。 如果没有,我想将其现有值分配给新列。
数据框看起来像这样:
RCS_D | RCS_enc
-------------------------
GRANITE | 1
CHALK | 2
GRANITE | 1
SCHIST | 3
MICROGRANITE | 4
SCHIST | 3
METACHALK | 5
我正在寻找的示例输出是这样的:
RCS_D | RCS_enc | RCS_min
--------------------------------
GRANITE | 1 | 1
CHALK | 2 | 2
GRANITE | 1 | 1
SCHIST | 3 | 3
MICROGRANITE | 4 | 1
SCHIST | 3 | 3
METACHALK | 5 | 2
我的问题是是否有一种方法可以在不使用循环的情况下快速在 Pandas 中执行此操作? 如果不是,最快的方法是什么? 谢谢!
有两个问题需要解决。 首先是发现RCS_D
列中所有单词之间的关系。
此函数采用pandas.Series
并返回具有正确映射的副本
def map_to_substrings(series):
series = series.copy()
for value in series.unique():
series[series.str.contains(value)] = value
return series
mapped_RCS_D = map_to_substrings(df["RCS_D"])
mapped_RCS_D
看起来像这样
0 GRANITE
1 CHALK
2 GRANITE
3 SCHIST
4 GRANITE
5 SCHIST
6 CHALK
dtype: object
然后我们可以对这个系列进行RCS_enc
,找到RCS_enc
列中的最小值,然后使用它来映射这些值。
df["RCS_min"] = mapped_RCS_D.map(df.groupby(mapped_RCS_D)["RCS_enc"].min())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.