python - 在 pandas 中查找满足特定条件的列的有效方法

标签 python pandas

我对以下问题中非常“类似 Pandas ”的解决方案感兴趣。我有一个简单的实现,可以循环行并检查两列中的条件。我正在研究 NLP 问题,需要在句子中定位标记。我有两个数据帧,一个是 token (药物)的 start_0end_0 位置,第二个数据帧包含 start_1end_1句子的。例如:

代币位置:

 df_0 =

 start_0   end_0    token
0     20      27    aspirin
1     50      59    trazodone
2     81      88    placebo
3    121     127    haldol

句子的位置:

 df_1=

    start_1 end_1
0         0    17
1        17    29
2        29    46
3        46    64
4        64    76
5        76    81
6        81    97
7        97   227

我需要在df_1中创建一个新列,并将 token 放入相应的行中,即:

df_1=

    start_1 end_1     token
0         0    17       NaN
1        17    29   aspirin
2        29    46       NaN
3        46    64 trazodone
4        64    76       NaN
5        76    81       NaN
6        81    97   placebo
7        97   227    haldol

如果标记的位置在句子内,则简单地匹配两个数据框。必须有一个具有 Pandas 功能的简单解决方案,而不是循环行并检查两个边界。

最佳答案

看来您真正想要做的是将df_0中的单词映射到df_1中定义的句子边界。您可以使用pd.cut为此,请注意将所有边界包含在 df_1 中:

boundaries = np.hstack((df_1['start_1'], df_1['end_1'].iloc[-1]))
boundary_labels = df_1.index

df_0['sentence'] = pd.cut(df_0['start_0'], boundaries, labels=boundary_labels, right=False)

print(df_0)

   start_0  end_0      token sentence
0       20     27    aspirin        1
1       50     59  trazodone        3
2       81     88    placebo        6
3      121    127     haldol        7

您可以轻松地将 df_0['sentence'] 系列映射回 df_1,因为这些值与 df_1['token'] 完美对齐> 在您想要的输出中。

关于python - 在 pandas 中查找满足特定条件的列的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52240213/

相关文章:

python - Django为 "Fully Loaded"后如何运行任意代码

python - 将 DataFrame 与 Pandas 中的 Series 连接起来

python - 将 Matplotlib 图形保存为全屏图像

python - 如何从 DataFrame 的命名列级别中选择值的子集?

python - 在 Python 的 sqlite3 模块中更新行时如何处理可选参数?

python - 值更新的 Json 写入问题

python - 应用不同的条件更改文件的内容

python - 有没有办法避免这种重复的代码?

python - 如何将 DataFrame 中列的所有值相乘,而不仅仅是基于位置的一个值?

python - pandas.to_sql 基于 'unique id' 用新数据替换旧数据