从dataframe A中 找出 a, b,c 列不为空,其他列为空的数据, 存入到abc表中; 找出b,c列为不为空, 其他列为空的数据,存入到bc表中
时间: 2024-09-30 16:09:31 浏览: 42
在Pandas中,你可以通过条件筛选来达到这个目标。首先,假设`df_A`是你的DataFrame,我们可以按步骤创建两个新的DataFrame:
1. 为了创建包含a、b、c三列非空值的新DataFrame `abc_table`,可以这样做:
```python
import pandas as pd
# 确保列名正确,例如 a, b, c
mask = (df_A[['a', 'b', 'c']] != '').all(axis=1)
abc_table = df_A.loc[mask, ['a', 'b', 'c']]
```
这将选择所有在'a', 'b', 'c'列上都没有缺失值的行。
2. 类似地,对于只包含b、c两列非空值的新DataFrame `bc_table`,可以做:
```python
mask = (df_A[['b', 'c']] != '').all(axis=1) & ~(mask & mask['a'])
bc_table = df_A.loc[mask, ['b', 'c']]
```
这里我们添加了一个额外的条件排除了'a'列有非空值的情况,因此结果仅包含'b'和'c'非空的行。
相关问题
将dataframe A 按照a,b, c, d 列, A的内容为字符串类型,先生成列的不重复的排列组合, 按照新的组合的列,从A中拆分这些列不为空,其他列为空的子表
首先,你可以使用`pandas`库中的`DataFrame`和`itertools`模块来完成这个任务。假设你的DataFrame `A` 确实有列名为'a', 'b', 'c', 'd',并且所有内容都是字符串类型。
1. 首先,我们需要生成这些列的所有可能非重复组合。可以使用`combinations`函数从`itertools`模块获取组合:
```python
import itertools
col_combinations = list(itertools.product(A.columns, repeat=A.shape[1]))
```
2. 对于每个组合,我们检查是否至少有一个非空值。为此,我们可以创建一个新的DataFrame,只包含那些对应列非空的数据行:
```python
new_tables = []
for col_combo in col_combinations:
subset_df = A.loc[:, col_combo]
if not subset_df.empty and all(subset_df.apply(lambda x: any(x != ''))):
new_tables.append(subset_df)
```
这里我们使用`all()`和`apply()`函数检查每一列是否有非空值(这里假定空字符串''代表空值)。
3. 最终,`new_tables`将是一个列表,包含了所有符合条件的子表。
将dataframe A 按照a,b, c, d 列, A的内容为字符串类型,先生成列的所有的排列组合, 按照新的组合的列,从A中拆分这些列不为空,其他列为空的子表
首先,你需要使用pandas库来操作DataFrame。在Python中,你可以通过`itertools.product`函数生成列的全排列,然后对每个排列应用条件筛选,只保留对应列非空的行。下面是一个简单的步骤说明:
1. 导入所需的库:
```python
import pandas as pd
from itertools import product
```
2. 创建DataFrame `A`,假设它已经包含字符串类型的'a', 'b', 'c', 'd'列:
```python
data = {'a': ['val1', 'val2', ''], 'b': ['val3', '', 'val4'], 'c': ['', 'val5', 'val6'], 'd': ['', '', '']}
df_A = pd.DataFrame(data)
```
3. 生成列的全排列,并拼接成一个新的索引:
```python
columns = df_A.columns.tolist()
column_permutations = list(product(*[columns] * len(columns)))
```
4. 对于每一个排列,创建一个新的DataFrame,筛选出指定列非空的行:
```python
result_tables = []
for perm in column_permutations:
sub_df = df_A.loc[:, perm].dropna(how='all') # 仅保留非空值的行
result_tables.append(sub_df)
```
现在,`result_tables`将是一个列表,包含了所有按给定列排列后的子数据框,其中只包含非空值的行。
如果你需要把这些结果保存到新的数据框中,可以考虑合并它们:
```python
full_result = pd.concat(result_tables) if result_tables else None
```
阅读全文