Python:需要在数据框中找到每个试验的开始

Posted

技术标签:

【中文标题】Python:需要在数据框中找到每个试验的开始【英文标题】:Python: Need to find beginning of each trial in dataframe 【发布时间】:2021-07-04 10:17:35 【问题描述】:

我有一个包含多次试验的熊猫数据框。试验编号为 1-12,每个试验有多行。我想制作一列 1 和 0,其中 1 表示试验开始的位置。这是我的代码:

for i in df['Trial Start']:
if df.groupby('Trial Number').head(1):
    i = 1
else:
    i = 0

我收到错误“ValueError:DataFrame 的真值不明确”。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all'

我知道为什么会出现此错误,但我也知道肯定有更好的方法来做到这一点。任何帮助表示赞赏。

【问题讨论】:

请提供您正在处理的数据样本 有一个例子吗? 数据框是否按“试用号”排序?如果是,则有shift 命令,您可以在其中将一行与下一行或上一行进行比较,并且您可以将值设置为“1”,只要这些值不同 【参考方案1】:

您可以使用transform() 来完成这项工作。

    dict = 'Trial Number': [1,1,1,1,2,2,3,3,3,3,4,4,4,4,5,6]
    df = pd.DataFrame(dict)
    df['Trial Start'] = df.groupby('Trial Number')['Trial Number']
           .transform(lambda x: [1]+[0]*(len(x)-1))
    print(df)

    Trial Number  Trial Start
0              1            1
1              1            0
2              1            0
3              1            0
4              2            1
5              2            0
6              3            1
7              3            0
8              3            0
9              3            0
10             4            1
11             4            0
12             4            0
13             4            0
14             5            1
15             6            1

在此示例中,传递给 transform() 的函数依次迭代传递 Series,其中包括每个 groupby 组中的所有值。在这种情况下,该函数是一个 lambda 函数,它利用传递的 Series 的大小来构建一个相应大小的列表,其中包括第一个位置的 1 和其余位置的 0。

【讨论】:

以上是关于Python:需要在数据框中找到每个试验的开始的主要内容,如果未能解决你的问题,请参考以下文章

从开始日期和结束日期开始,我如何找到当前“活动”的记录?

Python:计算python数据框中每个数字的出现次数

对 pandas 数据框中的连续值进行分组

在 Microsoft Access 文本框中开始新行

如何使用Scala计算Spark中数据框中列的开始索引和结束索引之间的行的平均值?

如何在熊猫数据框中找到每个月的“n”个最大值? [复制]