【问题标题】:assert additional parameter to pandas dataframe records为熊猫数据框记录断言附加参数
【发布时间】:2020-11-18 00:06:53
【问题描述】:

我得到了一个相当大的 pandas 数据框(5k 行,30 列)。我需要按照下面的说明进行操作。我试过了

pseudocode

for i in main_df.iterrows():
    for j in sub_df.iterrows():
        if j == part of i:
            i["sub_uid"] = j["sub_uid"]

但这似乎不起作用,或者对我来说太难调试了。 (也非常耗时)

我基本上没有想法,希望能得到你们的帮助:)

    main_df:
        v1  v2  vx3 vx4
    1   a   b   h   j
    2   a   b   n   p
    3   a   c   r   g
    4   d   e   p   j
    
    sub_df: take only part of main_df columns, drop duplicates. Assign uids for all combinations of v1 v2 parameters
        v1  v2  sub_uid
    1   a   b   01
    2   a   c   02
    3   d   e   03
    
    now back to main_df: add a column for sub_uids. For each record, determine sub_uid using sub_df
        v1  v2  vx3 vx4 sub_uid
    1   a   b   h   j   01
    2   a   b   n   p   01
    3   a   c   r   g   02
    4   d   e   p   j   03

【问题讨论】:

  • 为什么不mergev1v2上的两个数据框?
  • @Parfait 是的,就是这样。合并解决了这个问题。谢谢!

标签: python pandas dataframe data-science


【解决方案1】:

使用Groupby.ngroup直接将sub_uid赋值给main_df而不创建sub_df

In [2473]: df['sub_uid'] = df.groupby(['v1', 'v2']).ngroup().add(1)

In [2474]: df
Out[2474]: 
  v1 v2 vx3 vx4  sub_uid
1  a  b   h   j        1
2  a  b   n   p        1
3  a  c   r   g        2
4  d  e   p   j        3

【讨论】:

  • 这似乎足够了,但需要将 uid 重新解析为自定义字符串。 GroupBy.groups 可能会使用生成的字典来完成这项工作。我稍后会调查,现在我会坚持合并 Parfait 建议的。
  • 我对您的问题的理解是,您只有main_df,并且您想将sub_uid 附加到它。所以我给了你一个直接的方法来避免创建中间 sub_df 并使用 merge 到达我已经在的地方。
猜你喜欢
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2018-02-08
  • 2017-06-13
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多