【问题标题】:For loop with f-string with pandas dataframe带有f-string和pandas数据框的for循环
【发布时间】:2020-11-14 03:08:25
【问题描述】:

我需要尝试创建两个循环(必须分开):

LOOP 1) 对于每个水果:

  1. 如果该水果为真,则保留行
  2. 删除日期重复的行(可以删除任何一行)
  3. 将上述结果保存为每个水果的数据框

LOOP 2) 对于创建的每个数据框,在fruit_score 上绘制日期:

    concat   apple_score  banana_score       date        apple      banana  
1   apple     0.400         0.400        2010-02-12      True        False  
2   banana    0.530         0.300        2010-01-12      False       True   
3   kiwi      0.532          0.200       2010-03-03      False       False  
4   bana      0.634         0.100        2010-03-03      False       True   

我试过了:

fruits = ['apple',  'banana',   'orange']
for fruit in fruits:
    selected_rows = df[df[ fruit ] == True ]
    df_f'{fruit}' = selected_rows.drop_duplicates(subset='date')

for fruit in fruits:
    df_f'{fruit}'.plot(x="date", y=(f'{fruit}_score'), kind="line")

【问题讨论】:

  • 您是否尝试以编程方式定义变量的名称?例如,您希望获得一个名为 df_apple 的变量?
  • 您可以使用 dict 而不是基于 for 循环获取变量名:stackoverflow.com/a/11553769/1735729
  • 然后使用字典,fruits_df = {} 并在你的 for 循环中使用 fruits_df[fruit] = ...
  • @Manakin 我不认为这会起作用,因为他在 concat 中得到了“bana”,但香蕉列设置为 true。 +他希望在同一水果之间按日期删除重复,另一个将删除所有具有相同日期的水果的重复。他不是在数据帧上循环,而是在水果上循环。
  • @Youyoun 您可以在多个列上进行子集化,只需将fruits 添加到.drop_duplicates 这里没什么复杂的,也不需要遍历列表。

标签: python pandas dataframe for-loop f-string


【解决方案1】:

你应该按照@youyoun 的建议做一些事情:

dfs = {}
fruits = ['apple',  'banana']
for fruit in fruits:
    selected_rows = df[df[ fruit ] == True ].drop_duplicates(subset='date')
    dfs[f'df_{fruit}'] = selected_rows

for a,v in dfs.items():
    print(a)
    print(v)

输出:

df_apple
  concat  apple_score  banana_score        date  apple  banana
1  apple          0.4           0.4  2010-02-12   True   False
df_banana
   concat  apple_score  banana_score        date  apple  banana
2  banana        0.530           0.3  2010-01-12  False    True
4    bana        0.634           0.1  2010-03-03  False    True

【讨论】:

  • 更简单的你可以做dfs = {fruit, data for fruit,data in df.groupby('fruit').unique()}或类似的事情。
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2021-04-11
  • 1970-01-01
  • 2022-01-26
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多