如何基于另一列的值将熊猫数据框的某些行添加到列表

时间:2020-07-20 23:13:45

标签: python pandas csv

我有一个csv文件,其中一列标记为“ count”,然后有10列标记为1-10。共有100行。对于十列中的每一列,我想将该列中的所有值(“计数”值介于100-400之间)添加到列表中。这将导致10个列表。我已经附上了一个样本,其中包含数据的外观以及一些代码。谢谢enter image description here

基本上,对于每一列,我想要一个所有值的列表,其中该行的“计数”值在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笔记本电脑中崩溃了。谢谢!

1 个答案:

答案 0 :(得分:0)

从概念上讲,您已经快到了,但是您可能只希望内置的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来创建新字典。此外,这可能会令人困惑。

相关问题