从 Dataframe 中提取特定列的值,并使用Pandas逐行插入到新的 Dataframe 中

lsmd5eda  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(287)

我有一个 Dataframe ,即数据,具有日期时间索引和以下列:

id  activity     x          y           z
datetime                    
1970-01-01 00:42:00.219142823   1623    A   -0.152512   -8.585220   -1.219192
1970-01-01 00:42:00.269496827   1623    A   0.999466    -8.196548   -0.758926
1970-01-01 00:42:00.319850830   1623    A   0.450241    -8.701187   -1.290024
1970-01-01 00:42:00.370204834   1623    A   -0.042175   -9.739563   -1.787415
1970-01-01 00:42:00.420558838   1623    A   3.551483    -10.745132  -1.266403
... ... ... ... ... ...
1970-01-22 01:26:29.872699000   1644    A   2.239343    -8.408914   2.074087
1970-01-22 01:26:29.892898000   1644    A   2.548301    -8.157437   1.820215
1970-01-22 01:26:29.912994000   1644    A   2.636917    -7.786209   2.057322
1970-01-22 01:26:29.933195000   1644    A   2.545906    -7.743098   1.801055
1970-01-22 01:26:29.953291000   1644    A   2.373464    -8.071217   1.585503
279817 rows × 5 columns

每隔119行,我只想提取x、y、z列的值,以及活动标签,并将它们逐行放入新的 Dataframe 中。每列的值后面跟着下一列。如下所示:

values of column x|values of column y|values of column z|activity

Dataframe 数据的119行值之后的下一行

values of column x|values of column y|values of column z|activity

等等
任何想法都将是非常有帮助的,并非常感谢。
提前感谢您抽出时间!

mbskvtky

mbskvtky1#

如果数据框名为data,则可以使用

data.iloc[::119, [data.columns.get_loc(col) for col in ['x', 'y', 'z', 'activity']]]
lnxxn5zx

lnxxn5zx2#

编辑:在了解问题实际上是关于每5秒获取一次数据后,我们可以更直接地说:

wanted = ['x', 'y', 'z', 'activity']
newdf = df.resample('5s', origin='start').first()[wanted].copy()

注意:看看origin参数的各种可能性。使用'start'意味着我们从df中的第一个索引开始。但通常使用默认值('start_day')更自然,它使“round datetime”。
原文回答:

newdf = df.iloc[::119][['x', 'y', 'z', 'activity']].copy()

示例(可重现设置):

import numpy as np

np.random.seed(0)
n = 279817
df = pd.DataFrame({
    'id': np.linspace(1623, 1644, n).round().astype(int),
    'activity': ['A'] * n,
}, index=pd.date_range(start='1970-01-01 00:42:00', end='1970-01-22 01:26:30', periods=n))
df[list('xyz')] = np.random.normal(size=(n, 3))

# code above, then

>>> newdf
                                      x         y         z activity
1970-01-01 00:42:00.000000000  1.764052  0.400157  0.978738        A
1970-01-01 00:54:52.762565400 -0.477974 -0.479656  0.620358        A
1970-01-01 01:07:45.525130800  1.327783 -0.101281 -0.803141        A
1970-01-01 01:20:38.287696200 -1.429991 -0.061638 -1.432735        A
1970-01-01 01:33:31.050261600 -1.109478 -0.547518  0.665967        A
...                                 ...       ...       ...      ...
1970-01-22 00:29:53.740994081 -0.267150  0.414945 -0.627917        A
1970-01-22 00:42:46.503559481 -0.001320  0.743854  0.137284        A
1970-01-22 00:55:39.266124882 -0.469361 -1.204360 -1.688222        A
1970-01-22 01:08:32.028690282  0.340768 -0.911023  0.069327        A
1970-01-22 01:21:24.791255682 -1.461045  1.938692 -0.188877        A

[2352 rows x 4 columns]

相关问题