我有一个包含以下列的数据框:
A B C D AA1 AA2 BB1 BB2 CC1 CC2
我设置了一个表示这些变量名称的元组列表:
col2 = [
('AA1','AA2'),
('BB1','BB2'),
'CC1','CC2')
]
还有前四个变量的列表:
col1 = ['A','B','C','D']
我的目标是通过设置for循环来创建三个不同的数据帧(一个用于变量aa,BB和CC),其中包含col1中命名的变量,该循环遍历col2中的每个元组,并保留Aa1并删除AA2(以及BB和CC相同)。
这是我想要的最终输出:
df1:A B C D AA1
df2:A B C D BB1
df3:A B C D CC1
我尝试了以下功能:
def func1(df, first, second):
df1 = pd.concat([df[col1],df[first[x]]],axis=1)
df1 = df.drop(second[y],axis=1)
df1 = df1.loc[:,~df1.columns.duplicated()]
return df1.reset_index(drop=True)
first1,second1 = zip(*col2)
first1 = list(first1)
second1 = list(second1)
for x,y in first1,second1:
df = func1(df_input,first=x,second=y)
output += [(df)]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-135-11df6ece8a12> in <module>()
5 second1 = list(second1)
6
----> 7 for x,y in first1,second1:
8
9 df = func1(df_input,first=x,second=y)
ValueError: too many values to unpack (expected 2)
我不明白我在做什么错...任何人都可以帮助我吗?
非常感谢
答案 0 :(得分:1)
如果我对您的理解很好,为什么不简单:
df1 = df[['A', 'B', 'C', 'D', 'AA1']]
df2 = df[['A', 'B', 'C', 'D', 'BB1']]
df3 = df[['A', 'B', 'C', 'D', 'CC1']]
答案 1 :(得分:0)
见下文
first1 = [1, 2]
second1 = [3, 4]
for x, y in zip(first1, second1):
print('{} {}'.format(x, y))
输出
1 3
2 4
答案 2 :(得分:0)
ssd_mobilenet_v2
masks = [col1 + [first] for first, second in col2]
# [['A', 'B', 'C', 'D', 'AA1'], ['A', 'B', 'C', 'D', 'BB1'], ['A', 'B', 'C', 'D', 'CC1']]
frames = [frame.filter(items=mask) for mask in masks]
将是pandas.DataFrames的列表,您可以从中选择所需的帧。
您可以使用列表推导来创建不同的 masks 的列表(即frames
)
然后,您可以再次使用列表综合来从原始数据框中过滤该特定掩码。