首页 > 解决方案 > DataFrame.loc 生成列表对象而不是单个值

问题描述

我试图让我的数据框将特定值插入列中。所需的值将是“返回天气”,其中“城市”和“日期”都与指定值匹配。这是一个玩具示例:

index    City         Weather    Day    Return City    Return Weather
0        New York     65         3      Baltimore         
1        Atlanta      77         6      Chicago        
2        Baltimore    68         9      Orlando        
3        Chicago      62         13     Boston         
4        Boston       57         14     Atlanta       
5        Orlando      88         19     New York
6        Baltimore    59         3      Chicago
7        Chicago      66         6      Atlanta

这是我正在尝试的代码:

for i in df.index:
    day = df.loc[i, 'Day']
    rtn_city = df.loc[i, 'Return City']
    df.loc[i, 'Return Weather'] = df.loc[(df['City'] == rtn_city) & (df['Day'] == day), 'Weather'].values

但是我得到:

ValueError:使用可迭代设置时必须具有相等的 len 键和值

如果我将最后一行设置为打印...

results = df.loc[(df['City'] == rtn_city) & (df['Day'] == day), 'Temp'].values
print(results)

我得到了正确的答案,但它们似乎是列表:

[59]

[66]

这闻起来像我的问题。有什么想法吗?

标签: pythonpandas

解决方案


使用给定的索引集,您可以使用 .loc[] 直接选择不同“last_name”值的行——根据您的情况,可以单独选择,也可以选择多个。

results = df.loc[[(df['City'] == rtn_city) & (df['Day'] == day), 'Weather']].values 

或者按照@Sai Kumar 的建议尝试特定索引..

results = df.loc[(df['City'] == rtn_city) & (df['Day'] == day), 'Weather'].values[0]

推荐阅读