gpt4 book ai didi

python - "How to extract periodical data from a single column of the Pandas Dataframe"

转载 作者:太空宇宙 更新时间:2023-11-03 20:54:03 24 4
gpt4 key购买 nike

我有一个 161941 行 × 76 列的大数据 CSV 文件,我从中提取了 161941 行 × 3 列的有用数据。

现在我的数据框看起来是这样的

Extracted Dataframme of size 161941 rows × 3 columns

“bKLR_Touchauswertung”列是周期性数据,看起来是这种形式

"bKLR_Touchauswertung"
7
7
10
10
10
10
10
7
7
0
0
0
0
0
0
0
0
0
0
7
7
10
10
10
10
10
10
7
7
0
0
0
0
0
0
0
0
7
7
10
10
10
10
10
7
7
0
0
0
0
0
0

然后一直重复到最后

我想从中得到的是。

应获取该列中的每组非零值并将其作为新列附加到数据帧中。

可以说,第一组非零值应视为新列“set1”,依此类推。

如果我能得到任何可能的解决方案,那就太好了。谢谢,阿比奈

<小时/>

以下是初始数据帧和预期数据帧的更详细示例:

这是我下面的数据框

               temp     toucha
Timestamp

**185 83 7
191 83 7
197 83 10
. . .
. . .
. . .
2051 83 10**

2057 83 0
2063 83 0
2057 83 0
. . .
. . .
. . .
3000 83 0

**3006 83 7
3012 83 7
3018 83 10
. . .
. . .
. . .
6000 83 10**

6006 83 0
6012 83 0
6018 83 0
. . .
. . .
. . .
8000 83 0

这个序列继续下去,

现在,我需要一个如下所示的数据框

                temp     toucha  set1   set2    ste3.............
Timestamp

**185 83 7 7 0
191 83 7 7 0
197 83 10 10 0
. . . . .
. . . . .
. . . . .
2051 83 10 10 0**

2057 83 0 0 0
2063 83 0 0 0
2057 83 0 0 0
. . . . .
. . . . .
. . . . .
3000 83 0 0 0

**3006 83 7 0 7
3012 83 7 0 7
3018 83 10 0 10
. . . . .
. . . . .
. . . . .
6000 83 10 0 10**

6006 83 0 0 0
6012 83 0 0 0
6018 83 0 0 0
. . . . .
. . . . .
. . . . .
8000 83 0 0 0

最佳答案

如果您可以接受setxx列的数字不一定是连续的,则可以使用shift来检测0和非0值之间的变化,然后np.split 根据这些更改拆分数据帧索引。

完成此操作后,可以很简单地为每个序列添加一个新的 0 列并复制其中的原始值。但由于 np.split,使用简单的连续索引会更容易。所以代码可以是:

# use a simple consecutive index
df.reset_index(inplace=True)

# split the indices on transition between null and non null values
subs = np.split(df.index.values,
df[((df.toucha == 0)&(df.toucha.shift() != 0)
|(df.toucha != 0)&(df.toucha.shift() == 0))
].index.values)

# process those sequences
for i, a in enumerate(subs):
# ignore empty or 0 value sequences
if len(a) == 0: continue
if df.toucha[a[0]] == 0: continue
df['set'+str(i)] = 0 # initialize a new column with 0
df.loc[a, 'set'+str(i)] = df.toucha.loc[a] # and copy values

# set the index back
df.set_index('Timestamp', inplace=True)

使用以下示例数据

           temp  toucha
Timestamp
185 83 7
191 83 7
197 83 10
2051 83 10
2057 83 0
2063 83 0
2057 83 0
3000 83 0
3006 83 7
3012 83 7
3018 83 10
6000 83 10
6006 83 0
6012 83 0
6018 83 0
8000 83 0

它给出:

           temp  toucha  set0  set2
Timestamp
185 83 7 7 0
191 83 7 7 0
197 83 10 10 0
2051 83 10 10 0
2057 83 0 0 0
2063 83 0 0 0
2057 83 0 0 0
3000 83 0 0 0
3006 83 7 0 7
3012 83 7 0 7
3018 83 10 0 10
6000 83 10 0 10
6006 83 0 0 0
6012 83 0 0 0
6018 83 0 0 0
8000 83 0 0 0

关于python - "How to extract periodical data from a single column of the Pandas Dataframe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com