python-3.x - 根据许多条件过滤 Pandas 数据框
问题描述
我有一个大型数据框,其中包含一些模拟的输入和输出。输入为~100。对于每个独特的输入组合,存在一组独特的输出。我想为每个输入组合过滤数据框并检索相应的输出。我知道如何过滤数据框。对于这个小数据框:
input1 input2 input3 output1 output2
a1 a2 a3 0 1
a1 a4 a5 2 3
a6 a2 a3 4 5
我可以:output_x = df[(df['input1']==a1) & (df['input2']==a2) & (df['input3']==a3)]['output1']
然后我可以遍历每个可能的输入组合并检索所有输出。但是如果输入的数量非常大怎么办?有没有办法不重复100次(df['inputX']==Y)
?我正在考虑一个 pandas 函数,它检索一些数据框列的所有可能的值组合,并返回一些其他列的相应值。有这样的事情存在吗?
解决方案
您可以使用DataFrame.groupby:
mask_columns_input=df.columns.str.contains('input')
inputs=[*df.columns[mask_columns_input]]
for i,group in df.groupby(inputs):
print(group)
input1 input2 input3 output1 output2
0 a1 a2 a3 0 1
input1 input2 input3 output1 output2
1 a1 a4 a5 2 3
input1 input2 input3 output1 output2
2 a6 a2 a3 4 5
仅显示输出:
mask_columns_input=df.columns.str.contains('input')
inputs=[*df.columns[mask_columns_input]]
for i,group in df.groupby(inputs):
print(group.loc[:,~mask_columns_input])
输出:
output1 output2
0 0 1
output1 output2
1 2 3
output1 output2
2 4 5
您还可以创建一个字典来保存:
df_by_inputs={''.join(i):group for i,group in df.groupby(inputs)}
for key in df_by_inputs:
print(f'df_by_inputs[{key}]')
print('-'*45)
print(df_by_inputs[key])
df_by_inputs[a1a2a3]
---------------------------------------------
input1 input2 input3 output1 output2
0 a1 a2 a3 0 1
0 a1 a2 a3 0 1
df_by_inputs[a1a4a5]
---------------------------------------------
input1 input2 input3 output1 output2
1 a1 a4 a5 2 3
1 a1 a4 a5 2 3
df_by_inputs[a6a2a3]
---------------------------------------------
input1 input2 input3 output1 output2
2 a6 a2 a3 4 5
2 a6 a2 a3 4 5
print(df_by_inputs['a1a2a3'])
input1 input2 input3 output1 output2
0 a1 a2 a3 0 1
0 a1 a2 a3 0 1
推荐阅读
- android - Android Studio:无法设置 Gradle/Gradle 插件版本?
- batch-file - manage-bde protectionaserrorlevel 不起作用
- amazon-web-services - Glue 管道中的多个 S3 输入
- amazon-web-services - AWS SAM 脚本转换为 Terraform
- python - Django如何公开显示用户个人资料图片?
- javascript - jQuery:可拖动以下行:视觉“链接这两件事”指示器
- c - 有没有办法在例如得到警告。GCC 或 Clang 关于这种严格的别名违规?
- r - 如何在我的 R Plotly Legend 中添加这个元素?
- python - 如何在 Django 中输入 URL?
- javascript - React (Javascript) - 回调重叠