2个dataframe如何按字段相等组成新的dataframe
时间: 2024-10-16 22:14:38 浏览: 2
如果你想把两个DataFrame按照某些共享的列进行合并,你可以使用Pandas的`merge`、`concat`或`join`函数。这里有几个常见的方法:
1. **Merge on Common Columns** (内连接):
```python
df_result = pd.merge(df1, df2, on=['common_column_1', 'common_column_2'], how='inner') # 或者 'left', 'right', 'outer'
```
2. **Concatenate Along Rows** (行拼接):
```python
df_result = pd.concat([df1, df2], ignore_index=True, sort=False) if columns are not in same order else df1.append(df2)
```
3. **Join by Index** (基于索引的连接):
```python
df_result = df1.join(df2, lsuffix='_left', rsuffix='_right') # 如果列名冲突,可以指定suffixes
```
在以上代码中,`on`参数指定了用于匹配的列,`how`参数决定了连接类型(内连接、左连接、右连接或全连接)。如果两表的列名和数据顺序一致,可以直接使用`append`;如果不一致,可能需要用`ignore_index=True`。
相关问题
1、选取阅读成绩、数学成绩、写作成绩3个字段,计算总分和平均分,并添加为新的列,并打印出来
好的,可以使用 pandas 库来完成这个任务。假设你有一个名为 `df` 的 DataFrame,其中包含阅读成绩、数学成绩和写作成绩三个字段,可以按照以下代码进行计算总分和平均分,并添加为新的列:
```python
import pandas as pd
# 假设阅读成绩、数学成绩和写作成绩分别为 read_score、math_score、write_score
df['total_score'] = df['read_score'] + df['math_score'] + df['write_score'] # 总分
df['avg_score'] = df['total_score'] / 3 # 平均分
# 打印 DataFrame
print(df)
```
这样就可以在原来的 DataFrame 中添加总分和平均分这两个新的列,并打印出来。注意这里假设每个学生的三个科目的权重是相等的,因此平均分是总分除以 3。如果权重不相等,需要根据具体情况进行计算。
修改下列代码 #获取字段名称,并转化为列表 (计算置信度与支持度)c=list(Data.columns c9=0.5 #最小置信度 s9=0.2 #最小支持度 list1=[] #预定义定义列表list1,用于存放规则 list2=r] #预定义定义列表list2,用于存放规则的支持度 list3=[] #预定义定义列表list3,用于存放规则的置信度for k in range(len(c)): for q in range(len(c)): #对第c[k]个项与第c[q]个项挖掘关联规则 #规则的前件为c[k] #规则的后件为c[q] #要求前件和后件不相等 if c[k]!=c[q]: c1=Data[c[k]c2=Data[c[q]] I1=c1.values==1I2=c2.values==1 t12=np.zeros((len(c1))) t1=np.zeros((len(c1))) t12[I1&I2=1 t1[I1]=1 sp=sum(t12)/len(c1) #支持度 co=sum(t12)/sum(t1) #置信度#取置信度大于等于c0的关联规则if co>=c and sp>=s0:list1.append(c[k]+'--'+c[q])list2.append(sp)list3.append(co) #定义字典,用于存放关联规则及其置信度、支持度R='rule':list1,'support':list2,'confidence':list3]#将字典转化为数据框 R=pd.DataFrame(R #将结果导出到ExcelR.to excel('rule1.xlsx') #导入自行编写的apriori函数#结果文件outputfile = 'apriori rules,xls import apriori H+士
#获取字段名称,并转化为列表(计算置信度与支持度)
c = list(Data.columns)
c9 = 0.5 #最小置信度
s9 = 0.2 #最小支持度
list1 = [] #预定义列表list1,用于存放规则
list2 = [] #预定义列表list2,用于存放规则的支持度
list3 = [] #预定义列表list3,用于存放规则的置信度
for k in range(len(c)):
for q in range(len(c)):
#对第c[k]个项与第c[q]个项挖掘关联规则
#规则的前件为c[k]
#规则的后件为c[q]
#要求前件和后件不相等
if c[k] != c[q]:
c1 = Data[c[k]]
c2 = Data[c[q]]
I1 = c1.values == 1
I2 = c2.values == 1
t12 = np.zeros((len(c1)))
t1 = np.zeros((len(c1)))
t12[I1 & I2] = 1
t1[I1] = 1
sp = sum(t12) / len(c1) #支持度
co = sum(t12) / sum(t1) #置信度
#取置信度大于等于c9的关联规则
if co >= c9 and sp >= s9:
list1.append(c[k]+'--'+c[q])
list2.append(sp)
list3.append(co)
#定义字典,用于存放关联规则及其置信度、支持度
R = {'rule':list1,'support':list2,'confidence':list3}
#将字典转化为数据框
R = pd.DataFrame(R)
#将结果导出到Excel
R.to_excel('rule1.xlsx')
#导入自行编写的apriori函数
#结果文件outputfile = 'apriori_rules.xls'
import apriori as ap
#调用apriori函数生成关联规则
ap.generateRules(R, minConf=0.5, outputfile='apriori_rules.xls')
阅读全文