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:需要在数据框中找到每个试验的开始的主要内容,如果未能解决你的问题,请参考以下文章