我有一个100196行x 8列的数据框。
我期望得到类似于下面所示的输出
第2列至第5列具有相同的数据,因为ID相同。我只是想有所有的设计代码在一个单元格作为新线。我理解我们可以使用groupby和agg函数,但我只能添加一列。有谁能建议一下,如何解决这个问题?
ki0zmccv1#
我根据你的例子创建了一个模拟数据集:
import pandas as pd import numpy as np df = pd.DataFrame({ "ID": ["1", "1", "2", "3", "3", "3"], "Data 1": ["data11", "data11", "data12", "data13", "data13", "data13"], "Data 2": ["data21", "data21", "data22", "data23", "data23", "data23"], "Design Code": ["a", "b", "c", "d", "e", "f"] })
您可以对groupby中的不同列应用不同的聚合,以实现预期的结果,例如:
df \ .groupby("ID", as_index=False) \ .agg({ "Data 1": min, "Data 2": min, "Design Code": lambda x: "\n".join(np.unique(x)), })
输出:
ID Data 1 Data 2 Design Code 0 1 data11 data21 a\nb 1 2 data12 data22 c 2 3 data13 data23 d\ne\nf
至于Design Code的换行显示,如果你使用的是jupyter notebook,可以参考https://stackoverflow.com/a/46326725/22052558。
Design Code
1条答案
按热度按时间ki0zmccv1#
我根据你的例子创建了一个模拟数据集:
您可以对groupby中的不同列应用不同的聚合,以实现预期的结果,例如:
输出:
至于
Design Code
的换行显示,如果你使用的是jupyter notebook,可以参考https://stackoverflow.com/a/46326725/22052558。