Pandas:根据行值选择列

Joh*_*nes 6 python pandas

我有一个非常大的pandas.Dataframe数据框,想要通过选择其中一行具有特定值的所有列来创建一个新的数据框。

\n
        A     B     C     D    E \nRegion  Nord  S\xc3\xbcd   West  Nord Nord\nvalue   2.3   1.2   4.2   0.5  1.3\nvalue2  20    400   30    123  200\n
Run Code Online (Sandbox Code Playgroud)\n

现在我想创建一个新的 DataFrame,其中包含行“Region”的值为“Nord”的所有列。

\n

如何做呢?结果应该是这样的:

\n
        A     D    E\nRegion  Nord  Nord Nord\nvalue   2.3   0.5  1.3\nvalue2  20    123  200\n
Run Code Online (Sandbox Code Playgroud)\n

提前致谢

\n

jez*_*ael 7

使用第一个通过掩码DataFrame.loc选择所有行( )由另一个选择的行::Regionloc

\n
df = df.loc[:, df.loc[\'Region\'] == \'Nord\']\nprint (df)\n           A     D     E\nRegion  Nord  Nord  Nord\nvalue    2.3   0.5   1.3\nvalue2    20   123   200\n
Run Code Online (Sandbox Code Playgroud)\n

更好的是由带有原始列的第一行创建MultiIndex,然后可以通过以下方式选择DataFrame.xs

\n
df.columns = [df.columns, df.iloc[0]]\ndf = df.iloc[1:].rename_axis((None, None), axis=1)\nprint (df)\n          A    B    C    D    E\n       Nord  S\xc3\xbcd West Nord Nord\nvalue   2.3  1.2  4.2  0.5  1.3\nvalue2   20  400   30  123  200\n
Run Code Online (Sandbox Code Playgroud)\n
\n
print (df.xs(\'Nord\', axis=1, level=1))\n          A    D    E\nvalue   2.3  0.5  1.3\nvalue2   20  123  200\n\n\nprint (df.xs(\'Nord\', axis=1, level=1, drop_level=False))\n          A    D    E\n       Nord Nord Nord\nvalue   2.3  0.5  1.3\nvalue2   20  123  200\n
Run Code Online (Sandbox Code Playgroud)\n