python - 需要熊猫中的行值列表
问题描述
我有什么,我需要什么
我有一个p
带有 cols的 pandas DataFrame 'a'
,'b'
, 'c'
(存储在 中的列名pc
)。
从那我想创建一个pn
相同形状的 DataFrame,但每个单元格都是来自选定行的值列表。DataFramen
告诉我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
和分组:
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]
推荐阅读
- html - 为什么子元素不适合父元素(导致滚动条)?
- javascript - 将导入语句转换为 Web 路径
- php - 有没有办法找到以下json格式的sql结果?
- string - 如何在 OpenMDAO 组件之间传递字符串值?
- api - 下了 52 个订单,只有 50 个通过 API 传递到我们的 ERP 以供登录的客户使用
- wordpress - WP Speed of Light - 如何从延迟加载中排除单个图像
- c++ - 不在 for 循环内的顺序函数的 OpenMP 并行化
- json - 如何在 Apache Nifi 中合并分区的 Json
- xamarin.forms - 在 Xamarin Forms App 中集成 Twilio 聊天功能
- php - 警告:stripos() 在 php 中至少需要 2 个参数