[英]To filter rows from a list in a series in a dataframe in pandas
这是使用pd.DataFrame.apply
和带有enumerate
的生成器理解的一种方法。
import pandas as pd
from operator import itemgetter
df = pd.DataFrame({'Member': [1, 2, 3],
'Col1': [[1, 2, 3], [-1, 2], [-4, -2, 2, 3]],
'Col2': [[[12, 23], [12], [4345]],
[[12, 23], [12]],
[[12, 23], [12], [4345], [34354]]]})
def list_filter(row):
i = ((i, j) for i, j in enumerate(row['Col1']) if j > 0)
idx, vals = zip(*i)
return list(vals), list(itemgetter(*idx)(row['Col2']))
df[['Col1', 'Col2']] = df.apply(list_filter, axis=1).values.tolist()
print(df)
Col1 Col2 Member
0 [1, 2, 3] [[12, 23], [12], [4345]] 1
1 [2] [12] 2
2 [2, 3] [[4345], [34354]] 3
这是一个使用几个循环的选项
row2=[]
col2=[]
row1=[]
col1=[]
for i in range(0,len(df.Col1)):
for j in range(0,len(df.Col1.tolist()[i])):
if df.Col1.tolist()[i][j] > 0:
print i
print j
row2.append(df.Col2.tolist()[i][j])
row1.append(df.Col1.tolist()[i][j])
col1.append(row1)
col2.append(row2)
row1=[]
row2=[]
df['Col1']=col1
df['Col2']=col2
print(df)
Member Col1 Col2
0 1 [1, 2, 3] [[12, 23], [12], [4345]]
1 2 [2] [[12]]
2 3 [2, 3] [[4345], [34354]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.