【问题标题】:How to "squish" data in pandas data frame? [duplicate]如何“挤压”熊猫数据框中的数据? [复制]
【发布时间】:2022-07-20 21:54:00
【问题描述】:

我有一个df如下:

A B C
a b c1
a c c2
b a c3
a b c4

现在,基于 A 列和 B 列,我想得到这样的输出:

A B C
a b [c1, c4]
a c c2
b a c3

因此,如果记录的 A 列和 B 列中有相同的值,我想将 C 列中的值合并到一个结构中 - 数组将是最好的。我怎样才能做到这一点?提前致谢

【问题讨论】:

  • df.groupby(["A", "B"])["C"].agg(list)?
  • @DaniMesejo 这很好,但是它会产生一个数据框,如果 B 列中有多个值,它在 A 列中只有一次值,有没有办法做到这一点是每行 A 列中的值吗?

标签: python pandas dataframe


【解决方案1】:

将熊猫导入为 pd

data = {'A': ['a', 'a', 'b', 'a'], 'B': ['b', 'c', 'a', 'b'], 'C': ['c1', 'c2', 'c3', 'c4']} df = pd.DataFrame(数据)

a_vals = df.A.unique() b_vals = df.B.unique()

new_df = pd.DataFrame(columns=['A', 'B', 'C'])

对于 a_vals 中的 a_val: 对于 b_vals 中的 b_val: df_tmp = df.loc[(df['A'] == a_val) & (df['B'] == b_val)] 如果 len(df_tmp.index) > 0: new_c_val = '[' 对于索引,df_tmp.iterrows() 中的行: new_c_val = new_c_val + str(row['C']) + ',' new_c_val = new_c_val[:-1] + ']' new_data = {'A':a_val,'B':b_val,'C':new_c_val} new_df = new_df.append(new_data, ignore_index=True).reindex() 打印(new_df)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2012-11-05
    • 1970-01-01
    • 2021-07-22
    • 2019-07-13
    相关资源
    最近更新 更多