Python 需要熊猫中的行值列表 我拥有什么,我需要什么
我有一个熊猫数据框Python 需要熊猫中的行值列表 我拥有什么,我需要什么,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我有一个熊猫数据框p,带有cols'a','b','c'(col名称存储在pc中) 基于此,我想创建一个形状相同的数据帧pn,但每个单元格都是一个列表,其中包含选定行中的值。 数据帧n告诉我要为pn中的每一行从p中选择哪些行 import pandas as pd pc = ['a', 'b', 'c'] p = pd.DataFrame([[11, 12, 13], [21, 22, 23]], columns=pc
p
,带有cols'a'
,'b'
,'c'
(col名称存储在pc
中)
基于此,我想创建一个形状相同的数据帧pn
,但每个单元格都是一个列表,其中包含选定行中的值。
数据帧n
告诉我要为pn
中的每一行从p
中选择哪些行
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]。。。对于pc中的c
。。。但是怎么会有3个循环呢
另一个(可选)愿望
对于lambda
也可以这样做吗?我的直觉是:那会更快——但不确定
感谢您解答问题或提供帮助。IIUC,您可以:
data = [[[*x] for x in zip(*p.loc[idxs].values)] for idxs in n['sel_row']]
result = pd.DataFrame(data=data, columns=p.columns, index=p.index)
print(result)
输出
a b c
1001 [11] [12] [13]
1002 [11, 21] [12, 22] [13, 23]
您可以在这里编写自定义函数
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])
def f(idx):
return pd.Series(p.loc[idx, :].values.T.tolist())
n.sel_row.apply(f)
0 1 2
1001 [11] [12] [13]
1002 [11, 21] [12, 22] [13, 23]
使用lambda
可以将上述内容重写为:
n.sel_row.apply(lambda idx: pd.Series(p.loc[idx, :].values.T.tolist()))
您可以分解
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]
我最喜欢这个答案。。。因为它看起来非常简单和易懂。只有困惑地看到,如果没有参数
idx
,如何应用f
!用一点打印语句,我想我明白了:idx
是n.sel\u行的每个元素
!实际上我更熟悉语法:n.sel\u row.apply(lambda idx:f(idx))
。谢谢你的捷径!!谢谢是的,那些列名和索引非常有用!