Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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 如何连接两个数据帧并使用Pandas创建一个计算相应值的表?_Python_Pandas_Dataframe_Join_Count - Fatal编程技术网

Python 如何连接两个数据帧并使用Pandas创建一个计算相应值的表?

Python 如何连接两个数据帧并使用Pandas创建一个计算相应值的表?,python,pandas,dataframe,join,count,Python,Pandas,Dataframe,Join,Count,我的表1如下所示: State District ID Race Party 0 GA 1 White Dem 1 SC 5 Black Dem 2 VA 4 Black Ind 3 VA 4 White Repub 4 NY 2 White

我的表1如下所示:

        State   District ID Race    Party
  0     GA      1           White   Dem
  1     SC      5           Black   Dem
  2     VA      4           Black   Ind
  3     VA      4           White   Repub
  4     NY      2           White   Dem
  5     GA      1           Black   Dem
        State   District ID Event Type    
  0     GA      1           A; B; C   
  1     SC      5           B; A  
  2     VA      4           A; C
  3     NY      2           B  
  4     GA      1           A; C 
        State   District ID   # Event A   # Event B   # Event C     # White  # Black  # Dem   # Repub   # Ind 
  0     GA      1             2           1           2             1        1        2       0         0
  1     SC      5             1           1           0             1        1       0         0 
  2     VA      4             1           0           1             1        1        0       1         1
  3     NY      2             0           1           0             1        0        1       0         0
然后是表2,如下所示:

        State   District ID Race    Party
  0     GA      1           White   Dem
  1     SC      5           Black   Dem
  2     VA      4           Black   Ind
  3     VA      4           White   Repub
  4     NY      2           White   Dem
  5     GA      1           Black   Dem
        State   District ID Event Type    
  0     GA      1           A; B; C   
  1     SC      5           B; A  
  2     VA      4           A; C
  3     NY      2           B  
  4     GA      1           A; C 
        State   District ID   # Event A   # Event B   # Event C     # White  # Black  # Dem   # Repub   # Ind 
  0     GA      1             2           1           2             1        1        2       0         0
  1     SC      5             1           1           0             1        1       0         0 
  2     VA      4             1           0           1             1        1        0       1         1
  3     NY      2             0           1           0             1        0        1       0         0
我希望生成的数据集如下所示:

        State   District ID Race    Party
  0     GA      1           White   Dem
  1     SC      5           Black   Dem
  2     VA      4           Black   Ind
  3     VA      4           White   Repub
  4     NY      2           White   Dem
  5     GA      1           Black   Dem
        State   District ID Event Type    
  0     GA      1           A; B; C   
  1     SC      5           B; A  
  2     VA      4           A; C
  3     NY      2           B  
  4     GA      1           A; C 
        State   District ID   # Event A   # Event B   # Event C     # White  # Black  # Dem   # Repub   # Ind 
  0     GA      1             2           1           2             1        1        2       0         0
  1     SC      5             1           1           0             1        1       0         0 
  2     VA      4             1           0           1             1        1        0       1         1
  3     NY      2             0           1           0             1        0        1       0         0

当涉及到连接和创建计算相应行的结果表时,我非常不确定,而且我也从来没有使用Pandas来完成这项工作,所以我不太确定如何从这个开始。哪一张桌子会被认为是左桌子还是右桌子?这可能是一个非常常见的用例,我只是不知道代码行(或者如果我使用Postgres的话,SQL查询)是什么样子。注意:我删除了列名中的空格,使之更容易

from io import StringIO
import pandas as pd
df1 = pd.read_csv(StringIO(
"""
        State   District_ID Race    Party
  0     GA      1           White   Dem
  1     SC      5           Black   Dem
  2     VA      4           Black   Ind
  3     VA      4           White   Repub
  4     NY      2           White   Dem
  5     GA      1           Black   Dem
"""), delim_whitespace=True)

df2 = pd.read_csv(StringIO(
"""
        State   District_ID Event_Type    
  0     GA      1           A   
  1     SC      5           B  
  2     VA      4           A 
  3     NY      2           B  
  4     GA      1           A 
"""), delim_whitespace=True)
然后,我们创建三个数据透视表,分别对应于比赛、聚会、事件类型:

dfa = df1.assign(count = 1).pivot_table(index = ['State','District_ID'], columns = ['Race'], values='count' ,fill_value=0, aggfunc = 'sum')
dfb = df1.assign(count = 1).pivot_table(index = ['State','District_ID'], columns = ['Party'], values='count' ,fill_value=0, aggfunc = 'sum')
dfc = df2.assign(count = 1).pivot_table(index = ['State','District_ID'], columns = ['Event_Type'], values='count' ,fill_value=0, aggfunc = 'sum')
最后我们把他们连在一起

dfa.join(dfb).join(dfc)
输出


                   Black    White   Dem Ind Repub   A   B
State   District_ID                         
GA      1          1        1       2   0   0       2   0
NY      2          0        1       1   0   0       0   1
SC      5          1        0       1   0   0       0   1
VA      4          1        1       0   1   1       1   0
    State      District ID  Event Type
--  -------  -------------  ------------
 0  GA                   1  A
 0  GA                   1  B
 0  GA                   1  C
 1  SC                   5  B
 1  SC                   5  A
 2  VA                   4  A
 2  VA                   4  C
 3  NY                   2  B
 4  GA                   1  A
 4  GA                   1  C
OP更改为df2后编辑 如果第二个数据帧具有以“;”分隔的列表在
事件类型
中,可以使用
拆分
分解
将其转换为原始形式:

 df2 = pd.read_csv(StringIO(
 """    
        State   District ID  Event Type    
  0     GA      1           A; B; C   
  1     SC      5           B; A  
  2     VA      4           A; C
  3     NY      2           B  
  4     GA      1           A; C
"""), sep='\s\s+')
df2['Event Type'] = df2['Event Type'].str.split(';')
df2.explode('Event Type')
输出


                   Black    White   Dem Ind Repub   A   B
State   District_ID                         
GA      1          1        1       2   0   0       2   0
NY      2          0        1       1   0   0       0   1
SC      5          1        0       1   0   0       0   1
VA      4          1        1       0   1   1       1   0
    State      District ID  Event Type
--  -------  -------------  ------------
 0  GA                   1  A
 0  GA                   1  B
 0  GA                   1  C
 1  SC                   5  B
 1  SC                   5  A
 2  VA                   4  A
 2  VA                   4  C
 3  NY                   2  B
 4  GA                   1  A
 4  GA                   1  C

发布你的数据样本,而不是描述你的数据所包含的内容。你想实现什么目标还不是很清楚。看一看。嘿,伙计们,对此很抱歉-我更新了OP以反映一些示例数据。嘿,这样做很有效(尽管我还需要在join语句中提供后缀)。但是,如果第二个表中的事件类型列是一个分号分隔的列表,您知道我应该怎么做吗?@archingfork请查看我的编辑。在将来,如果你改变了问题,使原来形式的问题的答案不再有意义,你应该这样标记,这样将来的读者就不会感到困惑了。谢谢提醒