【发布时间】:2023-01-11 19:03:03
【问题描述】:
假设我有这样一个数据框:
data = [
{'column1': 'asd', 'column2': 'a', 'column3': 'mileage', 'column4': 7889, 'column5': None},
{'column1': 'fsd', 'column2': 'a', 'column3': 'temp', 'column4': 4557, 'column5': None},
{'column1': None, 'column2': 'a', 'column3': 'string', 'column4': None, 'column5': 'value_string1'},
{'column1': 'asd', 'column2': 'b', 'column3': 'mileage', 'column4': 5678, 'column5': None},
{'column1': 'fsd', 'column2': 'b', 'column3': 'temp', 'column4': 5830, 'column5': None},
{'column1': None, 'column2': 'b', 'column3': 'string', 'column4': None, 'column5': 'value_string2'},
{'column1': None, 'column2': 'c', 'column3': 'temp', 'column4': 10, 'column5': None},
{'column1': None, 'column2': 'c', 'column3': 'temp', 'column4': 8, 'column5': None},
]
df = pd.DataFrame(data)
column1 column2 column3 column4 column5
0 asd a mileage 7889.0 None
1 fsd a temp 4557.0 None
2 None a string NaN value_string1
3 asd b mileage 5678.0 None
4 fsd b temp 5830.0 None
5 None b string NaN value_string2
6 None c temp 10.0 None
7 None c temp 8.0 None
我想将此数据框转换为:
column2 mileage temp_1 temp_2
a 7889.0 4557.0 NaN
b 5678.0 5830.0 NaN
c NaN 10.0 NaN
c NaN Nan 8.0
我尝试使用 pandas 函数“pivot_table”
pivot_table = df.pivot_table(index='column2', columns='column3', values='column4')
但结果是
column3 mileage temp
column2
a 7889.0 4557.0
b 5678.0 5830.0
c NaN 9.0
所以这个函数结合了第 2 列的相等值,但如果它们在第 3 列也有相同的值,则第 4 列中的值将是原始表中值的平均值。
有没有办法修改这个函数以获得我想要的结果?或者还有另一种方法吗?
【问题讨论】:
-
你如何决定哪个
temp变成temp_1还是temp_2? -
按命令。如果我们有两行“column2”和“column3”相等,那么我们将有 temp_1 和第一行的值以及 temp_2 和第二行的值。另一种可能性是新表没有 temp_2 但有两行:
c NaN 10.0和c NaN 8.0所以没有 temp_2 列
标签: python-3.x pandas dataframe pivot-table