我有以下数据框:
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应该始终是唯一的。但纯粹是出于兴趣,如果符号不是唯一的话会发生什么(假设有一种方法可以解决这个问题吗?)。
答案 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'>
所以我不确定处理这样的情况你是什么意思而不放弃一些数据。