Python 在groupby函数之后合并两个不同大小的数据帧

Python 在groupby函数之后合并两个不同大小的数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试将groupby筛选数据帧与原始数据帧关联起来。在执行groupby之后,我丢失了原始数据帧中的一些列。其想法是将其与各自的州和城市价值观联系起来。但是,当我尝试将数据帧向后关联时,数据帧会恢复到正常大小,有17行。我只需要原始数据帧到包含9行的最终数据帧的接口 原始数据帧: | COD |STATE| CITY | AZIM | SET|TEC| 0 |ALAAD_0001 |AL |MAC |0 |1 |4 | 1 |A

我正在尝试将groupby筛选数据帧与原始数据帧关联起来。在执行groupby之后,我丢失了原始数据帧中的一些列。其想法是将其与各自的州和城市价值观联系起来。但是,当我尝试将数据帧向后关联时,数据帧会恢复到正常大小,有17行。我只需要原始数据帧到包含9行的最终数据帧的接口

原始数据帧:

    |  COD      |STATE| CITY  |   AZIM | SET|TEC|
0   |ALAAD_0001 |AL   |MAC    |0       |1   |4  |
1   |ALAAD_0001 |AL   |MAC    |120     |2   |4  |
2   |ALAAD_0001 |AL   |MAC    |120     |2   |4  |
3   |ALAAD_0001 |AL   |MAC    |240     |3   |4  |
4   |BAPID_0001 |BA   |SAL    |20      |1   |2  |
5   |BAPID_0001 |BA   |SAL    |20      |1   |2  |
7   |BAPID_0001 |BA   |SAL    |100     |2   |2  |
8   |BAPID_0001 |BA   |SAL    |210     |3   |2  |
9   |BAPID_0001 |BA   |SAL    |250     |3   |2  |
10  |BAPID_0001 |BA   |SAL    |250     |3   |2  |
11  |CEMBC_0003 |CE   |FOR    |90      |1   |4  |
12  |CEMBC_0003 |CE   |FOR    |80      |1   |4  |
13  |CEMBC_0003 |CE   |FOR    |160     |2   |4  |
14  |CEMBC_0003 |CE   |FOR    |160     |2   |4  |
15  |CEMBC_0003 |CE   |FOR    |170     |2   |4  |
16  |CEMBC_0003 |CE   |FOR    |280     |3   |4  |
分组后:

    | COD       |TEC     |SET |AZIM|
0   |ALAAD_0001 |4       |1   |0   |
1   |ALAAD_0001 |4       |2   |120 | 
2   |ALAAD_0001 |4       |3   |240 | 
3   |BAPID_0001 |2       |1   |20  | 
4   |BAPID_0001 |2       |2   |100 | 
5   |BAPID_0001 |2       |3   |250 |
6   |CEMBC_0003 |4       |1   |90  | 
7   |CEMBC_0003 |4       |2   |160 | 
8   |CEMBC_0003 |4       |3   |280 | 
df_-cut=(
df.groupby([“COD”、“TEC”、“SET”])
阿齐姆先生
.agg(lambda x:pd.Series.mode(x).max())
.reset_index()
)
预期产出:

    |   COD     | TEC    | SET |AZIM  | STATE | CITY |
0   |ALAAD_0001 |4       |1    |0     | AL    |MAC   |
1   |ALAAD_0001 |4       |2    |120   | AL    |MAC   |
2   |ALAAD_0001 |4       |3    |240   | AL    |MAC   |
3   |BAPID_0001 |2       |1    |20    | BA    |SAL   |
4   |BAPID_0001 |2       |2    |100   | BA    |SAL   |
5   |BAPID_0001 |2       |3    |250   | BA    |SAL   |
6   |CEMBC_0003 |4       |1    |90    | CE    |FOR   |
7   |CEMBC_0003 |4       |2    |160   | CE    |FOR   |
8   |CEMBC_0003 |4       |3    |280   | CE    |FOR   |

我们使用内部连接合并两个数据帧,因为原始df在合并键上有重复项,所以它返回重复值。解决那个问题很方便

代码

df_cut.merge(df.drop_duplicates(), on=["COD","TEC","SET", "AZIM"])
输出

    COD        TEC  SET AZIM    STATE   CITY
0   ALAAD_0001  4   1   0       AL      MAC
1   ALAAD_0001  4   2   120     AL      MAC
2   ALAAD_0001  4   3   240     AL      MAC
3   BAPID_0001  2   1   20      BA      SAL
4   BAPID_0001  2   2   100     BA      SAL
5   BAPID_0001  2   3   250     BA      SAL
6   CEMBC_0003  4   1   90      CE      FOR
7   CEMBC_0003  4   2   160     CE      FOR
8   CEMBC_0003  4   3   280     CE      FOR

欢迎来到StackOverflow!有关创建和格式化示例的提示,请阅读指南和指南。另外,您是否只是在寻找df.drop_duplicates()?将州和城市与AZIM一起纳入原始groupby中应该是可行的。否则,使用合并是完全正确的方法。伙计,非常感谢你纠正了我问题的格式。我不知道如何在堆栈溢出上写一个表。你有一些资料来指导我吗?对于熊猫数据帧,只需打印出来并将结果复制到代码块中。不需要桌子。