熊猫gropuby [[''col_name','来自另一个数据框的值']]

时间:2019-07-28 04:59:25

标签: pandas dataframe

我有两个非常大的熊猫数据框,dfdf_new

示例df

A       B          DU          DR
100     103       -2          -10
100     110       -8          -9
100     112        0          -4
100     105        2           0
100     111        NAN         12
.
.
.
264     100        NAN         -15
.
.
.

示例df_new

A      TD 
100    0
100    1
100    2
.
.
.
103    0
103    1
.
.
.

对于相同的{{1},我希望获得另一个B的熊猫数据帧,其DU小于或等于TD的{​​{1}} df_newA中的}。类似地,对于df的相同值,我需要df_new的计数,其中B大于DU的{​​{1}}(对于相同的TD(它还应包括{ {1}})。  即: 我期望的数据框应该是这样的:

df_new

如何在Python中执行此操作?

请注意,数据量巨大。

1 个答案:

答案 0 :(得分:2)

首先将DataFrame.merge与左连接一起用于一个Dataframe,然后将Series.gt的列与center进行比较,并 将>的{​​{3}}移到包含Series.le的新列中,最后汇总为<=

sum

另一种具有自定义功能的解决方案,但如果使用大型DataFrame df1 = df_new.merge(df.assign(DU = df['DU'].fillna(df_new['TD'].max() + 1)), on='A', how='left') df2 = (df1.assign(Count_Less=df1['DU'].le(df1['TD']).astype(int), Count_More=(df1['DU'].gt(df1['TD'])).astype(int)) .groupby(['A','TD'], as_index=False)['Count_Less','Count_More'].sum() ) print (df2) A TD Count_Less Count_More 0 100 0 3 2 1 100 1 3 2 2 100 2 4 1 3 103 0 0 0 4 103 1 0 0 ,则速度较慢:

df_new