【问题标题】:python pandas: fulfill condition and assign a value to itpython pandas:满足条件并为其赋值
【发布时间】:2021-09-01 00:40:29
【问题描述】:

我真的希望你能在这里帮助我...我需要将标签 (df_label) 分配给数据框 (df_data) 中的确切文件,并将每个文件中出现的所有标签保存在单独的 txt 文件中(这是一个简单一点)

df_data:

              file_name  file_start   file_end
0   20190201_000004.wav       0.000   1196.000
1   20190201_002003.wav    1196.000   2392.992
2   20190201_004004.wav    2392.992   3588.992
3   20190201_010003.wav    3588.992   4785.984
4   20190201_012003.wav    4785.984   5982.976
df_label:
Begin Time (s)
0     27467.100000
1     43830.400000
2     43830.800000
3     46378.200000

我尝试切换到 np.array 并使用 for 循环和 np.where 但没有任何成功...

【问题讨论】:

  • 您需要提供更多信息。 df_datadf_label 之间是什么关系?你如何确定一个标签属于一个文件?
  • 致歉。我会尝试更好地解释它。 df_labels 包括在我的 df_data 中的所有文件涵盖的 24 小时内创建的标签。因此,标签将适合列出的一个文件的时间跨度。一个文件可能有很多标签对应,有些文件根本没有标签。我相信我应该设置如下条件:label_time 大于和小于将标签分配给文件的条件,但我不知道该怎么做。有帮助吗?

标签: python pandas dataframe conditional-statements


【解决方案1】:

如果df_label 中的时间值恰好属于df_data 中的一个条目,则可以使用以下方法

def get_file_name(begin_time):
    file_names = df_data[
        (df_data["file_start"] <= begin_time)
         & (df_data["file_end"] >= begin_time)
    ]["file_name"].values
    return file_names.values[0] if file_names.values.size > 0 else None

df_label["file_name"] = df_label["Begin Time (s)"].apply(get_label)

这会将另一个列 file_name 添加到 df_label

【讨论】:

  • 这很有意义,但应用时我收到此错误IndexError: index 0 is out of bounds for axis 0 with size 0
  • 您能帮我解决这个错误问题吗?
  • 尝试编辑(您的 df_label 可能有问题)
  • 谢谢它的出色工作!我不得不删除 .values 因为 np.array 没有属性值,一旦完成,代码运行顺利。
【解决方案2】:

如果df_label 中的标签与df_data 中的文件顺序匹配,您可以简单地:

  • 将标签添加为df_data (df_data["label"] = df_label["Begin Time (s)"]) 的新列。

  • 使用 DataFrame.merge() 函数 (df_data = df_data.merge(df_labels, left_index=True, right_index=True))。

有关合并/加入的更多信息,您可以在此处找到示例:

https://thispointer.com/pandas-how-to-merge-dataframes-by-index-using-dataframe-merge-part-3/

https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

【讨论】:

  • 谢谢,试过了,还是不行。每个标签都适合一个文件的时间开始时间结束,并且应该分配给它。所以我基本上需要检查每个标签是否在每个文件的开始结束时间之内,如果是,则将标签分配给文件。
猜你喜欢
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多