【问题标题】:How to create new column names and populate row values from lists in other columns如何创建新列名并从其他列中的列表填充行值
【发布时间】:2020-01-17 18:44:23
【问题描述】:

我有一个数据集,其中包含两列中的值列表。我需要 A 列中的列表中的值成为新的列名,B 列中的列表中的值成为相应的行值。

我的数据集如下所示:

              A                       B  
----------------------------------------------------                  
0   [alpha, alpha2, alpha3]  [betha, betha2, betha3]     
1   [alpha, alpha2, alpha3]  [betha, betha2, betha3]
2   [alpha, alpha3]          [betha, betha3]    

我需要得到如下所示的数据集:

      alpha    alpha2    alpha3
------------------------------- 
0     betha    betha2    betha3
1     betha    betha2    betha3
2     betha    None      betha3

感谢帮助,我的想法不多了。 提前致谢。

【问题讨论】:

  • 您的DataFrame 大到令人望而却步?
  • 假设两个 df 的长度相等,您可以遍历行以使用每行的值创建新的数据帧,然后使用外部合并将它们组合在一起。
  • @ALollz 我的数据框包含大约 300000 行
  • 为什么 betha3 进入第三列而不是最后一行的第二列?
  • @Datanovice 因为 betha2 没有对应的值。

标签: python pandas list


【解决方案1】:

这将起作用:

A = pd.DataFrame([('alpha', 'alpha2', 'alpha3'),('alpha', 'alpha2', 'alpha3'),('alpha', 'alpha3')])
B = pd.DataFrame([('betha', 'betha2', 'betha3'),('betha', 'betha2', 'betha3'),('betha', 'betha3')])

final_df = pd.DataFrame(columns=pd.unique(A.values.ravel()))

for i in range(0,len(A)):
    col = list(A.iloc[i])
    data = list(B.iloc[i])
    row_df = pd.DataFrame(columns=col)
    row_df.loc[0] = data
    final_df = final_df.append(row_df,sort=False)

final_df.dropna(axis=1,how='all', inplace=True)
print(final_df)

输出如下:

   alpha  alpha2  alpha3
0  betha  betha2  betha3
0  betha  betha2  betha3
0  betha     NaN  betha3

【讨论】:

  • A 和 B 列中的元素是列表,而不是元组。此解决方案适用于元组,不适用于列表。
【解决方案2】:

如果列表对的长度始终相同:explode (pandas 0.25+) + pivot。对于不同的长度,您可以在爆炸 (groupby(level=0).cumcount()) 之后向索引添加 cumcount 级别,以便它们对齐,但您需要决定在这种情况下对齐的含义。

df1 = (pd.concat([df.explode(x)[x] for x in ['A', 'B']], 1)
         .pivot(columns='A', values='B')
         .rename_axis(None, axis=1))

   alpha  alpha2  alpha3
0  betha  betha2  betha3
1  betha  betha2  betha3
2  betha     NaN  betha3

【讨论】:

  • 此解决方案运行良好且快速。谢谢@ALollz
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 2021-01-16
相关资源
最近更新 更多