df1共有5987列387行,df2有300列1行,如何根据df2列中的数据筛选和df1列名相同的,并保存在一个新的df中
时间: 2023-04-06 21:03:09 浏览: 125
你可以使用 pandas 库中的 merge 函数,将 df1 和 df2 按照列名相同的列进行合并,然后根据 df2 中的数据筛选出需要的行,最后保存在一个新的 df 中。具体代码如下:
```python
import pandas as pd
# 读取 df1 和 df2
df1 = pd.read_csv('df1.csv')
df2 = pd.read_csv('df2.csv')
# 将 df1 和 df2 按照列名相同的列进行合并
merged_df = pd.merge(df1, df2, on=list(df2.columns))
# 根据 df2 中的数据筛选出需要的行
filtered_df = merged_df[merged_df[df2.columns[0]] == df2.iloc[0, 0]]
# 保存在一个新的 df 中
filtered_df.to_csv('filtered_df.csv', index=False)
```
其中,'df1.csv' 和 'df2.csv' 分别是 df1 和 df2 的数据文件,'filtered_df.csv' 是保存筛选后的结果的文件。
相关问题
现有两张表df1和df2,所有列名都相同,但行数不一样,如何用pandas根据名为“合同编号”的列将df1和df2进行匹配, 若df2中有df1没有的数据则把这些数据写入df1底部但不改变df1的列,并打印“df1”已更新,若df2中所有数据df1都有,则打印“df1不用更新”
可以使用merge函数将df1和df2按照“合同编号”列进行合并,然后根据合并结果判断是否需要更新df1。
代码示例如下:
```python
import pandas as pd
# 生成示例数据
df1 = pd.DataFrame({'合同编号': [1, 2, 3, 4], '金额': [1000, 2000, 3000, 4000]})
df2 = pd.DataFrame({'合同编号': [3, 4, 5], '金额': [3000, 4000, 5000]})
# 按照“合同编号”列进行合并
merged = pd.merge(df1, df2, on='合同编号', how='outer')
if merged.isnull().any().any():
# 如果有空值,说明df2中有df1没有的数据,将这些数据写入df1底部
new_rows = merged[merged['金额_y'].notnull()]
df1 = pd.concat([df1, new_rows], ignore_index=True)
print('df1已更新')
else:
# 如果没有空值,说明df2中所有数据df1都有
print('df1不用更新')
```
python中已知df1和df2具有相同的列,如何根据df2的列名筛选出df1中相同的列名并且将相同的列名单独存为一个dataframe
您好,这是一个关于Python的数据处理问题。您可以使用以下代码来实现:
```python
common_cols = df1.columns.intersection(df2.columns)
common_df = df1[common_cols]
```
其中,`common_cols`是df1和df2中相同的列名,`common_df`是df1中相同的列名单独存为一个dataframe。
希望能对您有所帮助。
阅读全文