我有一个数据框架,看起来像这样:
import pandas as pd
import numpy as np
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df = pd.DataFrame([[24, 13, 8, 9],
[11, 30, 7, 23],
[21, 31, 12, 30],
[ 2, 5, 19, 24],
[15, 18, 3, 16],
[ 2, 24, 28, 11],
[23, 9, 6, 12],
[29, 28, 11, 21]], index=arrays, columns=list('abcd'))
df
a b c d
bar one 24 13 8 9
two 11 30 7 23
baz one 21 31 12 30
two 2 5 19 24
foo one 15 18 3 16
two 2 24 28 11
qux one 23 9 6 12
two 29 28 11 21
我想对数据帧进行切片,以便结果包含所有以<code>foo
a b c d
bar two 11 30 7 23
foo one 15 18 3 16
two 2 24 28 11
获得此结果的一种方法是
pd.concat([df.loc[[('bar', 'two')],:], df.loc[('foo', slice(None)),:]])
但这感觉像是一个非常繁琐的方法,必须有一个更“pythonic”的方法..
您可以使用默认切片
l0 = df.index.get_level_values(0)
l1 = df.index.get_level_values(1)
cond = (l0 == "foo") | ((l0=="bar") & (l1=="two"))
df[cond]
输出
a b c d
bar two 11 30 7 23
foo one 15 18 3 16
two 2 24 28 11
查询
到救援:
df.query('ilevel_0 == "foo" or (ilevel_0 == "bar" and ilevel_1 == "two")')
a b c d
bar two 11 30 7 23
foo one 15 18 3 16
two 2 24 28 11
xs
,loc
等都失败了,因为跨级别的切片不一致。
我有一个多索引数据框,看起来像 uid tid文本 abc x t1 bcd y t2 uid 和 tid 是索引。我有一个 uid 列表,并希望获取与该列表中的 uid 相对应的行,但保留第 2 级索引值 (tid)。我想在不运行任何显式循环的情况下执行此操作。这可能吗?
我有两个形状相同的python数据帧,例如: 我想使用df2中的值作为行索引来选择df1中的值,并创建一个形状相等的新数据帧。预期结果: 我已尝试使用.loc,它在单个列中运行良好: 但是我不能同时在所有列上使用. loc或. iloc。我想避免循环来优化性能,因为我正在处理一个大数据帧。有什么想法吗?
我有一个dataframe,。 我想选择中不在列表中的所有索引,
如果我定义一个像这样的分层索引数据框: 内容如下所示: 我知道如何提取与给定列对应的数据。例如。对于列: 如何提取符合以下标准集的数据: , , , column , , 列 和 、、列、以及从开始的所有列 是偶数 (顺便说一句,我做了不止一次rtfm,但我真的觉得难以理解。)
我正在尝试使用多级索引对数据帧进行子集。例如: 如您所见,df2包含带有state和office_id多级索引。对于df2,我想通过使用multindex find来对dataframe进行子集: 在历史上,我会将索引放在dataframe和列的子集中,但这样做效率不高。 谁能给我指出正确的方向吗?谢谢你!
我正在尝试从多索引数据帧中仅使用一个索引来创建新的数据帧。 理想情况下,我想要这样的东西: 和: 基本上,我想删除除level之外的多索引的所有其他索引。有没有一个简单的方法可以做到这一点?