Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫,将一个数据帧映射到另一个数据帧?_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 熊猫,将一个数据帧映射到另一个数据帧?

Python 熊猫,将一个数据帧映射到另一个数据帧?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我不知道如何解决这个问题。我有3个数据帧;一个是真/假表[3532x622],另一个是单系列整数[662x1],另一个是我的主数据帧[3532x8]。真/假表是通过比较一系列点来创建的,这些点位于多边形内部,这就是为什么它具有它所具有的形状。我在下面列出了一张图表,说明我正在努力实现的目标 df_1 df_2 df_3 0 0 1 2 8 9

我不知道如何解决这个问题。我有3个数据帧;一个是真/假表[3532x622],另一个是单系列整数[662x1],另一个是我的主数据帧[3532x8]。真/假表是通过比较一系列点来创建的,这些点位于多边形内部,这就是为什么它具有它所具有的形状。我在下面列出了一张图表,说明我正在努力实现的目标

df_1       df_2                                   df_3    
  0          0      1     2         8     9         0
0 56489    0 True   False False ... False True    0 poly_a
1 45872    1 False  True  False ... True  False   1 poly_b
2 86932    2 False  True  False ... False False   2 poly_c
...        
8 45871
9 89641
转换为:

df_2
  0      1      2          8      9
0 56489  np.nan np.nan ... np.nan 89641
1 np.nan 86932  np.nan ... 45871  np.nan
2 np.nan 86932  np.nan ... np.nan np.nan
然后将其映射到主数据帧

df_3
  0      1 
0 poly_a 56489
1 ploy_a 89641
2 poly_b 86932
3 poly_b 45871
4 poly_c 86932
这就是我所开始的

# Creating Example Dataframes
df_1 = pd.DataFrame([56489, 45872, 89657, 56895, 87456])
df_2 = pd.DataFrame([[True, False, False, False, True],
                     [False, True, True, False, False],
                     [False, True, False, True, True]])
df_3 = pd.DataFrame(['poly_a', 'poly_b', 'poly_c'])

# Mapping dataframe 1 onto 2
for i in list(np.where(df_2 == True))[1]:
    df_new = pd.DataFrame(np.where(df_2 == True, df_1.iloc[i], np.nan))
    
df = pd.concat([df_3, df_new], axis=1, ignore_index=True)

我不知道从这里走到哪里。

我找到了一个解决方案,但它很难看。我讨厌所有的df=。。。但它是有效的

df_1 = pd.DataFrame([56489, 45872, 89657, 56895, 87456])
df_2 = pd.DataFrame([[True, False, False, False, True],
                     [False, True, True, False, False],
                     [False, True, False, True, True]])
df_3 = pd.DataFrame(['poly_a', 'poly_b', 'poly_c'])

for i in np.array(np.where(df_2 == True)).T:
    df_2.iloc[i[0], i[1]] = df_1.iloc[i[1]][0]
    
df = pd.concat([df_3, df_2], axis=1, ignore_index=True)

df = pd.melt(df, id_vars=0)
df = df.drop('variable', axis=1)

df = df.sort_values(0)
df = df.reset_index()
df = df.drop('index', axis=1)

df['value'] = df['value'].astype(str)
df[df.value.apply(lambda x: x.isnumeric())]

这应该可以做到:

导入numpy
进口大熊猫
#创建示例数据帧
df_1=pandas.DataFrame([5648945872896575687456])
df_2=pandas.DataFrame(
[
[真,假,假,假,真],
[假,真,真,假,假],
[假,真,假,真,真],
]
)
df_3=pandas.DataFrame([“poly_a”、“poly_b”、“poly_c”])
def替换_值(行:pandas.Series)->pandas.Series:
#复制df_1(第一行),但将其翻转为列
c=df_1.T.copy().iloc[0]
#使用行中的布尔值作为索引,将False替换为NaN
c、 loc[~row]=numpy.nan
返回c
#合并2和1
组合=df_2.应用(替换_值,轴=1)
#加3
结果=pandas.concat([df_3,组合],轴=1,忽略索引=True)
输出:

打印(结果)
0        1        2        3        4        5
0 poly_a 56489.0楠楠87456.0
1 poly_b NaN 45872.0 89657.0 NaN NaN NaN
2 poly_c NaN 45872.0 NaN 56895.0 87456.0

谢谢!我把我的解决方案贴在上面。我需要读更多关于python和pandas的书。了解更多!这比我想出来的要可读得多。