如何快速,轻松地按熊猫数据框中的column [0]的值选择一行

时间:2019-08-11 21:43:44

标签: python pandas

我已经在熊猫数据框中加载了两列的csv文件,该文件在每行的column [0](整数索引)中具有唯一键,在每行的column [1]中具有一个值。它没有标题。

我只想通过使用一个键与值column [0]进行匹配来查找column [1]中的单个值(或整个行系列)。

当然是有效的,等等。就好像这是一本字典,其字符串键像value = dict.get(key)

示例csv文件:

int maximumGap(const vector<int> &num) {
    if (num.empty() || num.size() < 2) return 0;

    int maxNum = *max_element(num.begin(), num.end());
    int minNum = *min_element(num.begin(), num.end());

    //average gap from minNum to maxNum.
    int gap = (maxNum - minNum - 1) / (num.size() - 1) + 1;

    //number of buckets = num.size() - 1
    vector<int> bucketsMin(num.size() - 1, INT_MAX);
    vector<int> bucketsMax(num.size() - 1, INT_MIN);

    //put into buckets
    for (int i = 0; i < num.size(); i++) 
    {
        if (num[i] != maxNum && num[i] != minNum)
        {
            int buckInd = (num[i] - minNum) / gap;
            bucketsMin[buckInd] = min(bucketsMin[buckInd], num[i]);
            bucketsMax[buckInd] = max(bucketsMax[buckInd], num[i]);
        }
    }
    int maxGap = INT_MIN;
    int previous = minNum;

    for (int i = 0; i < num.size() - 1; i++) 
    {
        if (bucketsMin[i] == INT_MAX && bucketsMax[i] == INT_MIN) continue;   //empty
        //i_th gap is minvalue in i+1_th bucket minus maxvalue in i_th bucket
        maxGap = max(maxGap, bucketsMin[i] - previous);
        previous = bucketsMax[i];
    }
    maxGap = max(maxGap, maxNum - previous);
    return maxGap;
}

...

a, "valueForA"
x, "valueForX"
z, "valueForZ"

5 个答案:

答案 0 :(得分:2)

我的建议是使用键字段作为索引并将值字段作为序列值,将值存储为简单的熊猫Series(而不是数据框)。可以通过以这种方式调用read_csv方法来实现(某些细节来自the OP's answer)。

s = pd.read_csv('/data/companyDataByCusip.csv', encoding='utf_8', names=['cusip','value'], index_col='cusip', squeeze=True)

现在您可以像访问字典一样访问Series

val = s[key]

如果确实需要数据框,则可以从squeeze中删除read_csv参数,然后使用df.at[key,'value']访问该值。

答案 1 :(得分:0)

您可以尝试:

df[df.column0==key].column1.iloc[0]

答案 2 :(得分:0)

使用df.at[index, column]See documentation here.

例如:

import pandas as pd

df = pd.DataFrame(data=[{'value': x*x} for x in range(10)], 
                  index=[x for x in range(10)])
print(df)
print('At 4: {}'.format(df.at[4, 'value']))

输出:

   value
0      0
1      1
2      4
3      9
4     16
5     25
6     36
7     49
8     64
9     81

At 4: 16

更新:

要获取数据框作为回报,可以尝试执行以下操作:

row = df[df.index.values == 4]
print(row)

输出:

   value
4     16

答案 3 :(得分:0)

简单的loc可以完成工作:

df.loc[[integer index]]

答案 4 :(得分:0)

好吧,看起来像使用.loc()一样,但是它要求您明确设置一个列作为行索引字段,并设置一个明确的列名。尽管我没有进行速度测试,但它仍然有效。

我找到的文档在这里:

https://www.kdnuggets.com/2019/04/pandas-dataframe-indexing.html

#  read in the file of the cusip database to a data frame
df = pandas.read_csv('/data/companyDataByCusip.csv',encoding='utf_8', names=['cusip','value'])
df.set_index('cusip',inplace=True)

rec = df.loc[cusip,:]
print(rec) # series for row