将列表作为数据框中的列插入到特定位置,具体取决于行中的值

问题描述 投票:-1回答:1

所以我有一个数据帧(tsv / csv文件),使用numpy,pandas和statsmodels。

在一列“媒体名称”中,媒体名称(一种刺激物)将出现在屏幕上(该刺激物正在移动。每一行代表一个时间戳)。

[每当在此列中出现特定的媒体名称(对于本示例,假设为“ stimulus1”),就应该从该行开始,在另一列中<5个数字说[[插入列表]]”。 >该列中的其他项目必须为空(np.nan)。

[另一个要求是,每次在“媒体名称”列中名称再次出现时,都必须插入该名称。因此,列表中的项目数量可能会短于连续出现的媒体名称的数量(请参见下面示例中的第一种情况)。

如果列表中的项目数大于连续出现的媒体名的数量,则必须尽早将其删除(请参见下面示例中的第二种情况)。

示例:

List1 = [5, 7, 1, 8, 9] # to be inserted in column "position" # when medianame "stimulus1" appears in column "medianame" medianame stimulus0 stimulus0 stimulus0 stimulus0 stimulus0 stimulus0 NaN stimulus1 stimulus1 stimulus1 stimulus1 stimulus1 stimulus1 stimulus1 stimulus1 stimulus1 stimulus1 NaN stimulus2 stimulus2 stimulus2 stimulus2 stimulus2 NaN stimulus1 stimulus1 stimulus1

在正确的位置附加后,希望它看起来像:

medianame position stimulus0 NaN stimulus0 NaN stimulus0 NaN stimulus0 NaN stimulus0 NaN stimulus0 NaN NaN NaN stimulus1 5 stimulus1 7 stimulus1 1 stimulus1 8 stimulus1 9 stimulus1 NaN stimulus1 NaN stimulus1 NaN stimulus1 NaN stimulus1 NaN NaN NaN stimulus2 NaN stimulus2 NaN stimulus2 NaN stimulus2 NaN stimulus2 NaN NaN NaN stimulus1 5 stimulus1 7 stimulus1 1

所以我有一个使用numpy,pandas和statsmodels的数据框(tsv / csv文件)。在“媒体名称”一栏中,媒体名称(一种刺激物)将显示在屏幕上(该刺激物正在移动。每一行...
python pandas list statsmodels
1个回答
0
投票
这是将mergegroupbycumsum和pd.Series构造函数一起使用的一种方法:

df.assign(key = df.groupby((df['medianame'] != 'stimulus1').cumsum()).cumcount())\ .merge(pd.Series(List1, index=range(1,len(List1)+1)).rename('position'), left_on='key', right_index=True, how='left')\ .drop('key', axis=1)

© www.soinside.com 2019 - 2024. All rights reserved.