Pandas:根据行值选择列

6

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

        A     B     C     D    E 
Region  Nord  Süd   West  Nord Nord
value   2.3   1.2   4.2   0.5  1.3
value2  20    400   30    123  200

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

如何实现?结果应该如下所示:

        A     D    E
Region  Nord  Nord Nord
value   2.3   0.5  1.3
value2  20    123  200

谢谢您的提前帮助。

2个回答

6

使用 DataFrame.loc,通过选择条件(mask)来选择所有行(:),其中选定的行是通过另一个loc选择的某行Region

df = df.loc[:, df.loc['Region'] == 'Nord']
print (df)
           A     D     E
Region  Nord  Nord  Nord
value    2.3   0.5   1.3
value2    20   123   200

首先通过原始列来创建MultiIndex,然后就可以使用DataFrame.xs进行选择:

df.columns = [df.columns, df.iloc[0]]
df = df.iloc[1:].rename_axis((None, None), axis=1)
print (df)
          A    B    C    D    E
       Nord  Süd West Nord Nord
value   2.3  1.2  4.2  0.5  1.3
value2   20  400   30  123  200

print (df.xs('Nord', axis=1, level=1))
          A    D    E
value   2.3  0.5  1.3
value2   20  123  200


print (df.xs('Nord', axis=1, level=1, drop_level=False))
          A    D    E
       Nord Nord Nord
value   2.3  0.5  1.3
value2   20  123  200

2

您还可以使用df.TSeries.eq

In [312]: df.T[df.T.Region.eq('Nord')].T
Out[312]: 
           A     D     E
Region  Nord  Nord  Nord
value    2.3   0.5   1.3
value2    20   123   200

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接