pandas Pands合并两个唯一列值上的行

kulphzqa  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(122)

我有一个问题,我一直在试图找到一个解决办法。你会认为这不会是很难弄清楚。
我有一个PandasDataFrame与以下格式:

Id               Name  Now   Then There   Sold      Needed
0   1              Caden  8.1   3.40  3.95    NaN         NaN
1   7            Bankist  NaN   2.45  2.20    NaN         NaN
2   1           Artistes  8.1   3.40  3.95    NaN         NaN
0   1                NaN  NaN    NaN   NaN  33.75     670,904
1   7                NaN  NaN    NaN   NaN  33.75     670,904

我想让DataFrame根据'Id'数据行合并其数据列,使它看起来像这样:

Id               Name  Now   Then There   Sold      Needed
0   1              Caden  8.1   3.40  3.95  33.75     670,904
1   7            Bankist  NaN   2.45  2.20  33.75     670,904
2   1           Artistes  8.1   3.40  3.95  33.75     670,904

正如您所看到的,“Id”列有两个Id# 1,每个Id都有一个唯一的“Name”。我还不知道如何提出这个问题,该问题可能会提供一些示例代码。到目前为止,我已经尝试了不同的方法,但都失败了,包括合并、联接和concat的不同组合。最好的结果是导致当前DataFrame具有NaN值。
当有重复的Id时,我试图使“已售出”和“所需”列(只有一个值)与相应的“Id”行对齐。

v8wbuo2f

v8wbuo2f1#

这里有一种方法
第一个

oipij1gg

oipij1gg2#

复制一个副本,分隔列,删除所有值都为nan的行,然后合并:

* 假设 Dataframe 为df1
df2=df1.copy()
df1.drop(['Sold', 'Needed'],axis=1,inplace=True)
df2.drop(['Name', 'Now', 'Then', 'There'],axis=1,inplace=True)
df1.dropna(subset="Name","Now","Then","There"],inplace=True,how='all',axis='rows')
df2.dropna(subset=["Sold","Needed"], inplace=True, how='all',axis='rows')
newdf=df1.merge(df2,how='left',left_on='Id',right_on='Id')
mpbci0fu

mpbci0fu3#

另一种可能的解决方案:

(df.iloc[:, :5].dropna(axis=0, subset=df.columns[1:5], how='all')
 .merge(df.iloc[:, [0, -2, -1]].dropna(axis=0), on='Id'))

输出量:

Id      Name  Now  Then  There   Sold   Needed
0   1     Caden  8.1  3.40   3.95  33.75  670,904
1   1  Artistes  8.1  3.40   3.95  33.75  670,904
2   7   Bankist  NaN  2.45   2.20  33.75  670,904

相关问题