python - 带有列表命名的forloop python
问题描述
嗨,我正在尝试执行 forloop
concatted score date status apple banana orange
0 apple_bana 0.500 2010-02-20 high True False False
1 apple 0.400 2010-02-10 high True False False
2 banana 0.530 2010-01-12 high False True False
3 kiwi 0.532 2010-03-03 low False False False
4 cake 0.634 2010-03-05 low False False False
df = df.drop(['banana', 'orange'], axis=1)
df['apple_count'] = df.groupby([pd.Grouper(key='date', freq='D')])
df["apple_high"] = df.groupby('date')['status'].transform(lambda x: (x=='high').sum())
fig = plt.figure()
plt.plot(df['date'], df['apple_count'])
fig.suptitle('Apple Graph', fontsize=20)
此代码适用于苹果。但是我怎么能做一个forloop:
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
循环需要:
- 如果相应水果的列 =True,则首先只保留行
- 执行 2 次计算,分别以“fruit”为前缀命名列和图形。
解决方案
你可以复制fruits
和remove(fruit)
all_fruits = ['apple', 'banana', 'orange']
for fruit in all_fruits:
drop_fruits = all_fruits.copy()
drop_fruits.remove(fruit)
print('to drop:', drop_fruits)
结果:
to drop: ['banana', 'orange']
to drop: ['apple', 'orange']
to drop: ['apple', 'banana']
或者你可以使用set() - set()
all_fruits = ['apple', 'banana', 'orange']
for fruit in all_fruits:
drop_fruits = list(set(all_fruits) - set( [fruit] ))
print('to drop:', drop_fruits)
但这一切都需要在df
之前复制droping
。也许更好的是使用
new_df = df[ ['concatted', 'score', 'date', 'status', fruit] ]
和这个一起工作new_df
... = new_df.groupby(...)
然后
df[ fruit + '_count' ] = ...
df[ fruit + '_high' ] = ...
或者
df[ '{}_count'.format(fruit) ] = ...
df[ '{}_high'.format(fruit) ] = ...
或使用f-string
df[ f'{fruit}_count' ] = ...
df[ f'{fruit}_high' ] = ...
推荐阅读
- android - 将 REST Api 响应的值返回给调用函数
- python - 处理文件时如何正确处理错误?
- javascript - 在同位素中以任何顺序匹配单词(使用输入值)
- c# - 当UI中的事件被另一个线程中的对象触发而不调用跨线程操作异常时,如何处理它?
- sql - 按国家和条件索引计算 SQL 分区中的市场总和
- javascript - 在循环内时,我的 jQuery 函数不会应用于元素
- angular - Angular - 具有相同域的多个站点的服务工作者
- java - java.net.SocketTimeoutException:在 FTPClient.listFiles 处读取超时
- python - 生成 TFrecord 时出现问题
- javascript - 从 JavaScript 添加复选框