【问题标题】:How do I extract specific values from a DataFrame and add them to a list?如何从 DataFrame 中提取特定值并将它们添加到列表中?
【发布时间】:2020-08-03 16:10:25
【问题描述】:

示例数据框:

      id             date       price   
93   6021501535   2014-07-25    430000      
93   6021501535   2014-12-23    700000    
313  4139480200   2014-06-18    1384000   
313  4139480200   2014-12-09    1400000   

first_list = [] second_list = []

我需要将与特定 ID 对应的第一个价格添加到第一个列表中,并将相同 ID 的第二个价格添加到第二个列表中。

示例: first_list = [430,000, 1,384,000] second_list = [700,000, 1,400,000]

之后,我将在折线图上绘制两个列表中的值,以比较第一个列表和第二个列表之间的价格差异。

我已经尝试使用 groupby 和 loc 来执行此操作,但我一直遇到错误。然后我尝试使用一个简单的 for 循环遍历每一行,但遇到了更多问题......

我将不胜感激。

【问题讨论】:

  • 选择这对值背后的逻辑是什么?
  • 我是编程新手,所以我问的问题可能听起来很傻。就像我上面提到的 - 我将在完成后绘制两个列表中的值。实际的 DataFrame 超过 10000 行。

标签: python-3.x pandas numpy dataframe


【解决方案1】:

根据您的问题,我认为没有必要将它们保存到列表中,因为您也可以将它们存储在其他地方(例如另一个 DataFrame)并绘制它们。下面的函数应该有助于填充您想要存储数据的任何位置。

def date(your_id):
    first_date = df.loc[(df['id']==your_id)].iloc[0,1]
    second_date = df.loc[(df['id']==your_id)].iloc[1,1]
    return first_date, second_date

def price(your_id):
    first_date, second_date = date(your_id)
    price_first_date = df.loc[(df['id']==6021501535) & (df['date']==first_date)].iloc[0,2]
    price_second_date = df.loc[(df['id']==6021501535) & (df['date']==second_date)].iloc[0,2]
    return price_first_date, price_second_date

price_first_date, price_second_date = price(6021501535) 

例如,如果现在您想将数据存储在新的 df 中,您可以执行以下操作:

selected_ids = [6021501535, 4139480200]
new_df = pd.DataFrame(index=np.arange(1,len(selected_ids)+1), columns=['price_first_date', 'price_second_date'])

for i in range(len(selected_ids)):
     your_id = selected_ids[i]
     new_df.iloc[i, 0], new_df.iloc[i, 1] = price(your_id)

new_df 然后在第一列中包含所有“第一个日期价格”,在第二列中包含所有“第二个日期价格”。绘图应该会成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多