判断Dataframe A 中的列a, b, c中的不为空的值, 按照行对比, 是否都在dataframe B中,如果不在,则将它存放到dataframe C中, 并举例实现。
时间: 2024-09-27 13:03:36 浏览: 31
pandas.DataFrame的pivot()和unstack()实现行转列
在Python的pandas库中,你可以通过以下步骤实现这个功能:
首先,假设我们有三个DataFrame:`df_A`, `df_B` 和一个空的DataFrame `df_C` 用于存储结果。
1. 确定哪些列存在非空值:
```python
non_empty_columns = df_A[['a', 'b', 'c']].dropna().columns.tolist()
```
这会返回一个包含所有非空列名的列表。
2. 对比两个DataFrame的列:
```python
intersection = set(non_empty_columns) & set(df_B.columns)
diff_df = pd.DataFrame(columns=non_empty_columns)
for col in non_empty_columns:
if col not in intersection:
diff_df[col] = df_A[col]
```
这里我们创建了一个新DataFrame `diff_df`,只包含那些在`df_A`中但不在`df_B`中的列,并保留其对应值。
3. 检查是否有数据需要转移到`df_C`:
```python
if not diff_df.empty:
df_C = diff_df
else:
print("No columns with non-empty values from DataFrame A are missing in DataFrame B.")
```
最后,如果你想要实际存储`df_C`,你需要创建一个新的DataFrame并将结果赋予它。
举例来说:
```python
# 假设df_A, df_B如下
df_A = pd.DataFrame({'a': [1, 2], 'b': [None, 4], 'c': ['5', np.nan]})
df_B = pd.DataFrame({'b': [4, 5], 'c': [np.nan, '6']})
# 实现上述步骤
...
print(df_C)
```
执行完上述代码后,`df_C` 将只包含那些在`df_A`中有非空值但`df_B`中没有的行。如果没有这样的列,`df_C`将是空的。
阅读全文