【发布时间】:2020-09-17 14:16:27
【问题描述】:
以这个csv为例:
Col1, Col2
1,3,
0,5,
1,4
0,7
假设我有一个列表,并且我想将Col2 的值附加到列表中,前提是同一行中Col1 的值是1。结果列表应为[3,4]。
如何在不使用 iterrows() 的情况下对 pandas 进行此操作?
【问题讨论】:
标签: python excel pandas loops csv
以这个csv为例:
Col1, Col2
1,3,
0,5,
1,4
0,7
假设我有一个列表,并且我想将Col2 的值附加到列表中,前提是同一行中Col1 的值是1。结果列表应为[3,4]。
如何在不使用 iterrows() 的情况下对 pandas 进行此操作?
【问题讨论】:
标签: python excel pandas loops csv
我认为.loc是最pythonic和最简单的方法。
df.loc[df['Col1'] == '1']['Col2'].to_list()
使用np.where的替代方法:
import numpy as np
df['Col3'] = np.where(df['Col1'] == 1, df['Col2'], '')
listt = list(filter(None,df['Col3'].to_list()))
zip 是iterrows 的循环替代方案。
listt = []
for x, y in zip(df['Col1'], df['Col2']):
if x == 1:
listt.append(y)
【讨论】:
假设您已将 csv 读入名为 df 的数据框,您可以使用以下代码:
wanted = df.query('Col1 == 1')['Col2'].values
mylist.extend(wanted)
【讨论】:
import pandas as pd
lst_result=[]
for ind, row in df.iterrows():
if df.at[ind,'Col1'] == 1:
lst_result.append(df.at(ind,['Col2']))
print(lst_result)
【讨论】: