gpt4 book ai didi

python - 合并列值存在差异的不同数据框

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:02 26 4
gpt4 key购买 nike

我是python和pandas的新手。现在,在这里,我有来自三个不同数据帧列的value_counts,我已使用以下命令将其转换为数据帧,

df1 = pd.DataFrame()
df1 = first_count.rename_axis('PredictedFeature').reset_index(name='counts') ,In the same way I got three dataframes ,



df1 =

predictedFeature counts
100 100
200 300
2200 150
0 11
10 15
dF2 =

predictedFeature counts
100 200
200 310
2100 150
2200 123
160 4
0 100

df3=

   predictedFeature                  counts
100 112
200 190
3600 89
156 2
2200 180
0 10

现在,为了合并这些数据帧,我尝试了

df_final = [df1, df2, df3]
df_final_percentage = reduce(lambda left, right: pd.merge(left, right, on='PredictedFeature'), df_final)

完成此操作后,它正在创建数据帧,但它仅采用常见的 PredictedFeatures 值。

所以,我得到了最终的数据框,例如,

predictedFeature    counts_x    counts_y    counts
100 100 200 112
200 300 310 190
2200 150 123 180

如何从这三个值中获取所有值,如果数据帧中不存在预测特征,那么该位置应该为 0。

输出就像,

PredictedFeature        counts_x       counts_y      counts
100 100 200 112
200 300 310 190
2200 150 123 180
2100 0 150 0
160 0 4 0
3600 0 0 89
156 0 0 2

谁能帮我解决这个问题吗?

有一件事是,在划分

df["counts_y"] = df["counts_y"] * 100 / df["counts_x"]
df["counts_per"] = df["counts"] * 100 / df["counts_x"]

数值中的0会影响百分比计算吗?

enter image description here

cols = ["PredictedFeature", "counts_per", "counts_y"]
df_percentage.to_csv('data.csv', columns=cols)

用于创建百分比 csv。

最佳答案

我认为您可以使用outer连接将缺失值替换为0:

df_final = [df1, df2, df3]
df_final_percentage = (reduce(lambda left, right: pd.merge(left,
right,
on='predictedFeature',
how='outer'), df_final)
.fillna(0)
.astype(int))
print (df_final_percentage)
predictedFeature counts_x counts_y counts
0 100 100 200 112
1 200 300 310 190
2 2200 150 123 180
3 2100 0 150 0
4 160 0 4 0
5 3600 0 0 89
6 156 0 0 2

另一个使用concat的解决方案:

dfs = [x.set_index('predictedFeature') for x in df_final]
df_final_percentage = pd.concat(dfs, axis=1).fillna(0).reset_index().astype(int)
print (df_final_percentage)
predictedFeature counts counts counts
0 100 100 200 112
1 156 0 0 2
2 160 0 4 0
3 200 300 310 190
4 2100 0 150 0
5 2200 150 123 180
6 3600 0 0 89

编辑1:

要过滤掉 010 值,请使用:

df_final = [df1, df2, df3]
df_final = [x[~x['predictedFeature'].isin([0,10])] for x in df_final]
df_final_percentage = (reduce(lambda left, right: pd.merge(left,
right,
on='predictedFeature',
how='outer'), df_final)
.fillna(0)
.astype(int))
print (df_final_percentage)
predictedFeature counts_x counts_y counts
0 100 100 200 112
1 200 300 310 190
2 2200 150 123 180
3 2100 0 150 0
4 160 0 4 0
5 3600 0 0 89
6 156 0 0 2

关于python - 合并列值存在差异的不同数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59368776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com