首页 > 解决方案 > 如何根据另一列的值将熊猫数据框的某些行添加到列表中

问题描述

我有一个 csv 文件,其中一列标记为“计数”,然后是 10 列,标记为 1-10。总共有 100 行。对于十列中的每一列,我想将该列中的所有值添加到列表中,其中“计数”值在 100-400 之间。这将产生 10 个列表。我附上了数据的样例,以及我拥有的一些代码。谢谢在此处输入图像描述

本质上,对于每一列,我想要该行的“计数”值在 100-400 之间的所有值的列表。我想将所有列表保存在字典中,将列标题映射到所需间隔内的所有值的列表。

到目前为止,我有:

import pandas as pd
dict ={}
data = pd.read_csv('Data.csv') 
headers = data.columns.values
headers = headers[1:]
count = 1
for header in headers:
    for index, row in data.iterrows():
        dict[str(count)] = []
        if 100<=data.loc[index, 'count'] <= 400:
            dict[str(count)].append(data.loc[index, header])
count+=1

但这似乎在 jupyter notebook 中崩溃了。谢谢!

标签: pythonpandascsv

解决方案


从概念上讲,您快到了,但您可能只是希望内置pandas函数来帮助您执行此操作:to_dict.

# Get the data which falls into the range of interest
range_data = data[(100<=data['count'])&(data['count']<=400)]

# Convert column names to strings (rather than numbers)
range_data.columns = range_data.columns.astype(str)

# Convert to a dictionary
value_dict = range_data.drop(columns=['counts']).to_dict(orient='list')```

范围比较

您将无法在 python 中执行此操作:

100<=data.loc[index, 'count'] <= 400

您需要将每个比较分开,如下所示:

100<=data.loc[index, 'count'] and data.loc[index, 'count'] <= 400

命名

给你的字典命名是个坏主意dict。这将用您的字典覆盖基本功能dict,因此您将无法再调用dict创建新字典。此外,它可能会很混乱。


推荐阅读