从一行数据框创建系列

时间:2015-04-10 08:38:47

标签: python pandas

我有以下数据框:

Symbol, col1, col2, col3
abc,    435,  5465, 675
xyz,    565,  45,   567
mno,    675,  456,  789

我想根据Symbol选择一个特定的行,结果是一个pandas系列。例如,选择xyz应该给我以下系列:

Symbol, col1, col2, col3
xyz,    565,  45,   567

我已经制定了逻辑规则,使得Symbol应该始终是唯一的。但纯粹是出于兴趣,如果符号不是唯一的话会发生什么(假设有一种方法可以解决这个问题吗?)。

2 个答案:

答案 0 :(得分:1)

假设Symbol是DataFrame索引,只需使用DataFrame.loc选择所需的行:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(9).reshape(3, 3), 
                  index=['abc', 'xyz', 'mno'], 
                  columns=['col1', 'col2', 'col3'])
df 
col1    col2    col3
abc 0   1   2
xyz 3   4   5
mno 6   7   8

In [21]: df.loc['xyz']
Out[21]:
col1    3
col2    4
col3    5


In [22]:

    isinstance(df.loc['xyz'], pd.Series)
Out[22]:
True

DataFrame的单行或多列是Series。例如,要选择第一列,只需调用df [' col1']。

如果'符号'不是索引,您可以将其设置为索引或使用以下布尔键方法:

df[df.Symbol == 'xyz']

也等同于

df.loc[df.Symbol == 'xyz']

第二种方法对于使用布尔键进行赋值非常有用。

对于非唯一索引,调用df.loc将返回与包含该索引的所有行对应的DataFrame:

在[23]中:

df = pd.DataFrame(np.arange(12).reshape(4, 3), 
                  index=['abc', 'xyz', 'mno', 'xyz'], 
                  columns=['col1', 'col2', 'col3'])

In [24]:

df.loc['xyz']
Out[24]:
col1    col2    col3
xyz 3   4   5
xyz 9   10  11

答案 1 :(得分:0)

如果索引值不唯一,则会获得数据集而不是系列:

import pandas as pd

data = [['Tokyo','London', 'New York', 'Manchester'],
['Japan','UK','US','UK'],
['Asia','Europe','North America','Europe']]

df = pd.DataFrame(data).transpose()
df.columns = ['City','Country','Continent']
df2 = df.set_index('City')

选择东京会给出一系列:

print df2.loc['Tokyo']
print type(df2.loc['Tokyo']) 

Country      Japan
Continent     Asia
Name: Tokyo, dtype: object

<class 'pandas.core.series.Series'>

如果索引是通过例如country:

df2 = df.set_index('City')

然后你得到一个数据帧:

print df3.loc['UK']
print type(df3.loc['UK'])
                City Continent
Country                       
UK            London    Europe
UK       Manchester    Europe
<class 'pandas.core.frame.DataFrame'>

所以我不确定处理这样的情况你是什么意思而不放弃一些数据。