gpt4 book ai didi

python - 需要 Pandas 中的行值列表

转载 作者:行者123 更新时间:2023-12-04 02:30:05 26 4
gpt4 key购买 nike

我有什么,我需要什么

我有一个 pandas DataFrame p 和 cols 'a', 'b', 'c' (列名称存储在 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 也可以吗?我的直觉是:那样会更快——但不确定!

感谢您解答问题或提供任何帮助。

最佳答案

你可以分解n,用它来分割p和groupby:

s = n['sel_row'].explode()
p.loc[s].groupby(s.index).agg(list)

输出:

             a         b         c
1001 [11] [12] [13]
1002 [11, 21] [12, 22] [13, 23]

关于python - 需要 Pandas 中的行值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64789818/

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