gpt4 book ai didi

python - 根据 pd.series 类型的变量对 pandas 数据框进行子集化

转载 作者:行者123 更新时间:2023-12-01 00:35:54 26 4
gpt4 key购买 nike

我有一个如下所示的数据框:

df = pd.DataFrame({"location": ["north", "south", "south", "north"], "store" : ["a", "b", "c", "d"], "12345" : [2,4,3,6], "23434": [4,3,7,0], "23454": [8,9,0,1], "65432": [4,6,5,7], "34254": [0,0,9,1]})

df

我想通过以下变量对其进行子集化:

var = pd.Series([12345, 65432, 34254])

var

最终输出应如下所示: desired output

我的原始数据框和变量很大,我无法使用列名或使用 .loc 和 .iloc 进行子设置,因此我们将不胜感激。

最佳答案

将值转换为字符串,因为列名称是 Index.astype 的字符串然后按子集列出并选择:

df = df[['location', 'store'] + var.astype(str).tolist()]
print (df)
location store 12345 65432 34254
0 north a 2 4 0
1 south b 4 6 0
2 south c 3 5 9
3 north d 6 7 1

如果可能,var 中的某些值与 add Index.intersection 不匹配:

var = pd.Series([12345, 65432, 34254, 1000])

df = df[['location', 'store'] + df.columns.intersection(var.astype(str), sort=False).tolist()]
print (df)
location store 12345 65432 34254
0 north a 2 4 0
1 south b 4 6 0
2 south c 3 5 9
3 north d 6 7 1

另一个想法是创建MultiIndex:

df = df.set_index(['location','store'])
df = df[var.astype(str).tolist()]
#if possible some values not match
#df = df[df.columns.intersection(var.astype(str), sort=False).tolist()]
print (df)
12345 65432 34254
location store
north a 2 4 0
south b 4 6 0
c 3 5 9
north d 6 7 1

关于python - 根据 pd.series 类型的变量对 pandas 数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57765452/

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