我有一个suspend fun fetchItems(): List<MyClass> {
return client.get<MyClassList>(URL).items
}
,看起来像这样
dataframe
我想将其转换为以下A B
1 [[1], [2]]
2 [[1, 2], [3, 4]]
3 [[1, 2, 3, 4, 5], [6, 7, 8, 9]]
。
dataframe
此转换是否有任何干净的方法?
到目前为止,我已经编写了这段代码。
A C D
1 1 2
2 1 3
2 2 4
3 1 6
3 2 7
3 3 8
3 4 9
谢谢
答案 0 :(得分:0)
您可以执行以下操作:
A = [l[0] for l in df["B"]]
B = [l[1] for l in df["B"]]
A = [A[i][:len(B[i])] for i in range(len(A))]
A2 = []
C = []
D = []
idx = 1
for a, b in zip(A, B):
for x, y in zip(a, b):
A2.append(idx)
C.append(x)
D.append(y)
idx += 1
df = pd.DataFrame({"A": A2, "C": C, "D": D})
输出:
A C D
0 1 1 2
1 2 1 3
2 2 2 4
3 3 1 6
4 3 2 7
5 3 3 8
6 3 4 9
答案 1 :(得分:0)
您在问题中提供不一致的数据。在第一部分中,嵌套列表的长度不相等,而编辑确实之后的替代示例具有相同长度的嵌套列表。
我在下面的解决方案中假设后者,即嵌套列表的长度相等。
# generate data
df = pd.DataFrame({
"A": [1, 2, 3],
"B": [
[[1], [2]],
[[1, 2], [3, 4]],
[[1, 2, 3, 4], [6, 7, 8, 9]]
]})
# create new columns C & D
df = pd.concat([df.A, df.B.apply(pd.Series)], axis=1)
df.columns = ['A', 'C', 'D']
输出:
A C D
0 1 [1] [2]
1 2 [1, 2] [3, 4]
2 3 [1, 2, 3, 4] [6, 7, 8, 9]
现在爆炸嵌套列表。
col_a, col_c, col_d = [], [], []
lens = df.D.agg(len).to_list()
for i in range(df.shape[0]):
col_a.extend([df.A.iloc[i]] * lens[i])
for i in df.C:
col_c.extend(i)
for i in df.D:
col_d.extend(i)
df1 = pd.DataFrame({"A": col_a, "C": col_c, "D": col_d})
输出:
A C D
0 1 1 2
1 2 1 3
2 2 2 4
3 3 1 6
4 3 2 7
5 3 3 8
6 3 4 9