【发布时间】:2021-02-23 15:01:20
【问题描述】:
我有什么,我需要什么
我有一个 pandas DataFrame p 和 cols 'a'、'b'、'c'(col 名称存储在 pc)。
据此,我想创建一个形状相同的 DataFrame pn,但每个单元格都是来自选定行的 值列表。
DataFrame n 告诉我从p 中为pn 中的每一行选择哪些行。
import pandas as pd
pc = ['a', 'b', 'c']
p = pd.DataFrame([[11, 12, 13],
[21, 22, 23]],
columns=pc,
index=[1001,
1002])
n = pd.DataFrame([[[1001] ],
[[1001, 1002]]],
columns=['sel_row'],
index=[1001,
1002])
我可以(以及想要)实现的目标
我能得到的最远...给我一个列列表,而不是行。
那么,我是否混淆了嵌套的 for 循环?
pn = pd.DataFrame([ [p.loc[ix, pc].values for ix in n.loc[indx].values[0]]
for indx in n.index ])
print (pn)
# The actual output:
# 0 1
# 0 [11, 12, 13] None
# 1 [11, 12, 13] [21, 22, 23]
# The required output:
# 0 1 2
# 0 [11] [12] [13]
# 1 [11, 21] [12, 22] [13, 23]
杂念
也许我也应该迭代类似p.loc[ix, c] ... for c in pc...但怎么会有3个循环??
另一个(可选的)愿望
lambda 也可以吗?我的直觉是:那会更快——但不确定!
感谢您解决问题或提供任何帮助。
【问题讨论】:
标签: python pandas list dataframe