- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从一个 API 接收一个数据框,其中包含初始列中某些实体的数据,后面的列包含这些实体的元数据。数据是专有的,所以我无法准确显示,但数据框的结构如下所示:
idx name types value value_date desc group owner key_name key_value key_name key_value key_name key_value
1 name1 type1 45 2021-05-30 name1-type1 G1 O1 k1 A1 k2 A2 k3 A3
2 name1 type2 23 2021-05-30 name1-type2 G1 O1 k3 B3 NaN NaN k2 B2
3 name2 type1 41 2021-05-30 name2-type1 G2 O2 NaN NaN k1 C1 NaN NaN
4 name3 type1 39 2021-05-30 name3-type1 G1 O1 k1 D1 k3 D3 NaN NaN
5 name4 type1 40 2021-05-30 name4-type1 G3 O3 k1 E1 k3 E3 k2 E2
6 name4 type2 21 2021-05-30 name4-type2 G3 O3 k3 F3 k2 F2 k1 F1
7 name4 type3 11 2021-05-30 name4-type3 G3 O3 NaN NaN NaN NaN NaN NaN
8 name5 type1 44 2021-05-30 name5-type1 G1 O1 NaN NaN k1 H1 NaN NaN
9 name6 type1 49 2021-05-30 name6-type1 G2 O2 NaN NaN k2 I2 NaN NaN
10 name6 type2 26 2021-05-30 name6-type2 G2 O2 k1 J1 NaN NaN k3 J3
下面的代码将生成上述示例数据框:
df = pd.DataFrame( {'idx': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}, 'name': {0: 'name1', 1: 'name1', 2: 'name2', 3: 'name3', 4: 'name4', 5: 'name4', 6: 'name4', 7: 'name5', 8: 'name6', 9: 'name6'}, 'types': {0: 'type1', 1: 'type2', 2: 'type1', 3: 'type1', 4: 'type1', 5: 'type2', 6: 'type3', 7: 'type1', 8: 'type1', 9: 'type2'}, 'value': {0: 45, 1: 23, 2: 41, 3: 39, 4: 40, 5: 21, 6: 11, 7: 44, 8: 49, 9: 26}, 'value_date': {0: '2021-05-30', 1: '2021-05-30', 2: '2021-05-30', 3: '2021-05-30', 4: '2021-05-30', 5: '2021-05-30', 6: '2021-05-30', 7: '2021-05-30', 8: '2021-05-30', 9: '2021-05-30'}, 'desc': {0: 'name1-type1', 1: 'name1-type2', 2: 'name2-type1', 3: 'name3-type1', 4: 'name4-type1', 5: 'name4-type2', 6: 'name4-type3', 7: 'name5-type1', 8: 'name6-type1', 9: 'name6-type2'}, 'group': {0: 'G1', 1: 'G1', 2: 'G2', 3: 'G1', 4: 'G3', 5: 'G3', 6: 'G3', 7: 'G1', 8: 'G2', 9: 'G2'}, 'owner': {0: 'O1', 1: 'O1', 2: 'O2', 3: 'O1', 4: 'O3', 5: 'O3', 6: 'O3', 7: 'O1', 8: 'O2', 9: 'O2'}, 'key_name': {0: 'k1', 1: 'k3', 2: float('nan'), 3: 'k1', 4: 'k1', 5: 'k3', 6: float('nan'), 7: float('nan'), 8: float('nan'), 9: 'k1'}, 'key_value': {0: 'A1', 1: 'B3', 2: float('nan'), 3: 'D1', 4: 'E1', 5: 'F3', 6: float('nan'), 7: float('nan'), 8: float('nan'), 9: 'J1'}, 'key_name_1': {0: 'k2', 1: float('nan'), 2: 'k1', 3: 'k3', 4: 'k3', 5: 'k2', 6: float('nan'), 7: 'k1', 8: 'k2', 9: float('nan')}, 'key_value_1': {0: 'A2', 1: float('nan'), 2: 'C1', 3: 'D3', 4: 'E3', 5: 'F2', 6: float('nan'), 7: 'H1', 8: 'I2', 9: float('nan')}, 'key_name_2': {0: 'k3', 1: 'k2', 2: float('nan'), 3: float('nan'), 4: 'k2', 5: 'k1', 6: float('nan'), 7: float('nan'), 8: float('nan'), 9: 'k3'}, 'key_value_2': {0: 'A3', 1: 'B2', 2: float('nan'), 3: float('nan'), 4: 'E2', 5: 'F1', 6: float('nan'), 7: float('nan'), 8: float('nan'), 9: 'J3'}} )
df.rename(columns={'key_name_1':'key_name','key_value_1':'key_value','key_name_2':'key_name','key_value_2':'key_value'}, inplace=True)
注意
重复
"key_name", "key_value"
之后的对列业主 .这些列保存元数据值,所以
key_name
是元数据名称,
key_value
是它的值(value)。现在一个实体可以有不同数量的元数据,所以对于某些行,可能有 15-20 个这样的对列。
NaN
如果该元数据不适用于该实体。
key_name
成为列,该列中的值应该是
key_value
对于每个实体(如适用):
idx name types value value_date desc group owner k1 k2 k3
1 name1 type1 45 2021-05-30 name1-type1 G1 O1 A1 A2 A3
2 name1 type2 23 2021-05-30 name1-type2 G1 O1 NaN B2 B3
3 name2 type1 41 2021-05-30 name2-type1 G2 O2 C1 NaN NaN
4 name3 type1 39 2021-05-30 name3-type1 G1 O1 D1 NaN D3
5 name4 type1 40 2021-05-30 name4-type1 G3 O3 E1 E2 E3
6 name4 type2 21 2021-05-30 name4-type2 G3 O3 F1 F2 F3
7 name4 type3 11 2021-05-30 name4-type3 G3 O3 NaN NaN NaN
8 name5 type1 44 2021-05-30 name5-type1 G1 O1 H1 NaN NaN
9 name6 type1 49 2021-05-30 name6-type1 G2 O2 NaN I2 NaN
10 name6 type2 26 2021-05-30 name6-type2 G2 O2 J1 NaN J3
现在的问题是这些
"key_name", "key_value"对于问题数据框中的每个实体,对数据的顺序不同。如果您看到
名称1-类型1 ,
(
k1
, A1)
按顺序首先出现,然后是
(
k2
, A2)
, .... 但对于
名称4-type2 ,
(
k3
, F3)
首先出现,然后是
k2
然后
k1
,完全相反。
最佳答案
来自 pyjanitor 的帮助工具组合可能有帮助:
# pip install pyjanitor
import janitor
import pandas as pd
(df.pivot_longer(index = slice("idx", "owner"),
names_to=("names", "values"),
names_pattern=["name", "value"],
values_to="valued")
.dropna()
.pivot_wider(index = slice("idx", "owner"),
names_from="names")
.merge(df.loc[:, "idx":"owner"],
how = 'outer')
.sort_values('idx')
)
idx name types value value_date desc group owner k1 k3 k2
0 1 name1 type1 45 2021-05-30 name1-type1 G1 O1 A1 A3 A2
1 2 name1 type2 23 2021-05-30 name1-type2 G1 O1 NaN B3 B2
2 3 name2 type1 41 2021-05-30 name2-type1 G2 O2 C1 NaN NaN
3 4 name3 type1 39 2021-05-30 name3-type1 G1 O1 D1 D3 NaN
4 5 name4 type1 40 2021-05-30 name4-type1 G3 O3 E1 E3 E2
5 6 name4 type2 21 2021-05-30 name4-type2 G3 O3 F1 F3 F2
9 7 name4 type3 11 2021-05-30 name4-type3 G3 O3 NaN NaN NaN
6 8 name5 type1 44 2021-05-30 name5-type1 G1 O1 H1 NaN NaN
7 9 name6 type1 49 2021-05-30 name6-type1 G2 O2 NaN NaN I2
8 10 name6 type2 26 2021-05-30 name6-type2 G2 O2 J1 J3 NaN
pivot_longer只是提供了一种从宽到长 reshape 的更简单方法 - 对于您的情况,有一个模式(有些列有
name
,一些
.value
) - 我们在
names_pattern
中使用该模式翻转 table 。
pivot_wider建立在
pandas pivot
在这种情况下,它只是语法糖——这里使用的唯一原因是因为我不想输入所有索引名称:),但你可以跳过它,直接使用
pivot
.结果不包括
idx
7,因为它完全为null ...
merging带回原件
df
重新介绍它。
index = [*df.columns[:8]]
base = (df.melt(index, value_name = "valued", ignore_index = False)
.dropna()
.drop(columns="variable"))
提取数据框,其中
valued
仅以
K
开头, 在它的时候,追加
index
现有索引:
Ks = (base.loc[base.valued.str.startswith("k")]
.set_index([*index], append = True)
)
提取数据框,其中
valued
不以
K
开头:
non_Ks = (base.loc[~base.valued.str.startswith("k")]
.rename(columns={"valued":"flip_this_column"})
.set_index(index, append = True)
)
综合
Ks
与
non_Ks
,删除不相关的标签并重置索引:
(pd.concat([Ks, non_Ks], axis = 'columns')
.set_index('valued',append=True)
.unstack()
.droplevel(0, axis = 'columns')
.rename_axis(columns=None)
.reset_index(index)
)
idx name types value value_date desc group owner k1 k2 k3
0 1 name1 type1 45 2021-05-30 name1-type1 G1 O1 A1 A2 A3
1 2 name1 type2 23 2021-05-30 name1-type2 G1 O1 NaN B2 B3
2 3 name2 type1 41 2021-05-30 name2-type1 G2 O2 C1 NaN NaN
3 4 name3 type1 39 2021-05-30 name3-type1 G1 O1 D1 NaN D3
4 5 name4 type1 40 2021-05-30 name4-type1 G3 O3 E1 E2 E3
5 6 name4 type2 21 2021-05-30 name4-type2 G3 O3 F1 F2 F3
7 8 name5 type1 44 2021-05-30 name5-type1 G1 O1 H1 NaN NaN
8 9 name6 type1 49 2021-05-30 name6-type1 G2 O2 NaN I2 NaN
9 10 name6 type2 26 2021-05-30 name6-type2 G2 O2 J1 NaN J3
关于python - Pandas - 根据具有重复名称的重复键值对列 reshape 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67759399/
如何检查字符串是否被 reshape ?示例:“aab”返回 0,因为“a”无法 reshape 为该字符串或任何其他更短的字符串。 另一个例子是“aabbaab”返回 1,因为“aabb”可以被 r
我无法清楚地理解theano的reshape。我有一个形状的图像矩阵: [batch_size, stack1_size, stack2_size, height, width] ,其中有 s
如何检查字符串是否被 reshape ?示例:“aab”返回 0,因为“a”无法 reshape 为该字符串或任何其他更短的字符串。 另一个例子是“aabbaab”返回 1,因为“aabb”可以被 r
这是原始数据 a=[[1,2,3,4,5,6], [7,8,9,10,11,12]] 我想把它转换成这样的格式: b=[[1,2,3,7,8,9], [4,5,6,10,11,12]] a
我目前正在学习 CS231 作业,我意识到一些令人困惑的事情。在计算梯度时,当我第一次 reshape x 然后得到转置时,我得到了正确的结果。 x_r=x.reshape(x.shape[0],-1
这个问题在这里已经有了答案: Reshaping multiple sets of measurement columns (wide format) into single columns (lon
我有一个包含超过 1500 列的宽格式数据集。由于许多变量都是重复的,我想将其 reshape 为长形式。然而,r 抛出一个错误: Error in guess(varying) : Failed
我有一个长格式的数据框狗,我正在尝试使用 reshape() 函数将其重新格式化为宽格式。目前看起来是这样的: dogid month year trainingtype home scho
这个问题在这里已经有了答案: how to reshape an N length vector to a 3x(N/3) matrix in numpy using reshape (1 个回答)
我对 ndarray.reshape 的结构有疑问.我读过 numpy.reshape()和 ndarray.reshape是 python 中用于 reshape 数组的等效命令。 据我所知,num
所以这是我的麻烦:我想将一个长格式的数据文件改成宽格式。但是,我没有唯一的“j”变量;长格式文件中的每条记录都有几个关键变量。 例如,我想这样做: | caseid | gender | age |
Whis 这个数据框, df df id parameter visit value sex 1 01 blood V1 1 f 2 01 saliva V
我有一个列表,其中包含几个不同形状的 numpy 数组。我想将这个数组列表 reshape 为一个 numpy 向量,然后更改向量中的每个元素,然后将其 reshape 回原始数组列表。 例如: 输入
我有一个形状为 (1800,144) 的数组 (a) 其中 a[0:900,:] 都是实数,后半部分数组 a[900:1800,:] 全部为零。我想把数组的后半部分水平地放在前半部分旁边,然后将它们推
我有一个如下所示的数组: array([[0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2
我正在创建一个 tf.Variable(),然后使用该变量创建一个简单的函数,然后我使用 tf.reshape() 展平原始变量,然后我在函数和展平变量之间使用了 tf.gradients()。为什么
我有一个名为 data 的数据框,我试图从中识别任何异常价格。 数据框头部看起来像: Date Last Price 0 29/12/2017 487.74 1 28/
我有一个 float vec 数组,我想对其进行 reshape vec.shape >>> (3,) len(vec[0]) # all 3 rows of vec have 150 columns
tl;dr 我可以在不使用 numpy.reshape 的情况下将 numpy 数组的 View 从 5x5x5x3x3x3 reshape 为 125x1x1x3x3x3 吗? 我想对一个体积(大小
set.seed(123)data <- data.frame(ID = 1:10, weight_hus = rnorm(10, 0, 1),
我是一名优秀的程序员,十分优秀!