gpt4 book ai didi

python - 在进行合并时 reshape Pandas 数据框

转载 作者:太空狗 更新时间:2023-10-30 02:35:47 24 4
gpt4 key购买 nike

我有一个 pandas.DataFrame (df) 有一些元数据,其中有一个 ID , ColumnValue ,我想将其与另一个 df 结合,例如:

df_map = pd.DataFrame({"ID" : [3, 7, 17], "Column" : ["A1", "B7", "C17"], 
"Value" : ["ValA1", "ValB7", "ValC17"]})

我想合并上面的内容(需要一个更好的词)和下面的 df,其中列名与 Column,下面 df 中的行值与上面的 ID 行值匹配。

df_main = pd.DataFrame({"A1" : [3, 6], "A5" : [5, 10], "B7" : [7, 14] , 
"C17" : [17, 34], "C19" : [19, 38] })

因此,我想将它们合并df's,这样我就可以根据 Value 列将它们添加为附加列来 reshape 它ID 匹配的维度,即 df_result = combine(df_map, df_main)

我基本上希望得到如下结果

df_result = pd.DataFrame({"A1" : [3, 6], "A5" : [5, 10], "B7" : [7, 14] ,
"C17" : [17, 34], "C19" : [19, 38], "Value A1" : ["ValA1", None],
"Value B7" : ["ValB7", None], "Value C17" : ["ValC17", None ]})

Out[30]:
A1 A5 B7 C17 C19 Value A1 Value B7 Value C17
0 3 5 7 17 19 ValA1 ValB7 ValC17
1 6 10 14 34 38 None None None

不确定在 pandas 中执行此操作的最佳方法?

最佳答案

第一个DataFrame.meltindex 转换为列以避免在 DataFrame.merge 中丢失使用左连接,然后按 DataFrame.set_index 重新整形与 DataFrame.unstack ,通过 DataFrame.dropna 仅删除缺失的列最后用 map 压平 MultiIndex:

df = (df_main.reset_index()
.melt('index',var_name='Column', value_name='ID')
.merge(df_map, how='left')
.set_index(['index', 'Column'])
.unstack()
.rename_axis(None)
.dropna(how='all', axis=1))
df.columns = df.columns.map('_'.join)
print (df)
ID_A1 ID_A5 ID_B7 ID_C17 ID_C19 Value_A1 Value_B7 Value_C17
0 3 5 7 17 19 ValA1 ValB7 ValC17
1 6 10 14 34 38 NaN NaN NaN

关于python - 在进行合并时 reshape Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117027/

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